slowjet

is a part of a carburetor

iOS4.3以下だとEvent delegationでA要素を探せない

こんなコードがあって、アンカー部分をタップしてもiOS4.3以下ではA要素を捕捉できない。

document.addEventListener('click', function(ev) {
  var target = ev.target;
  // iOS5以上、Android2.2以上では大丈夫(2.1以下未確認
  if ( target.nodeName === 'A' ) {
    console.log(target.href);
  }
}, false);

試しにalertしてみると、"#text"になってる。

document.addEventListener('click', function(ev) {
  var target = ev.target;
  console.log(target.nodeName);
  // => #text
}, false);

#textを捕捉したいわけじゃないので、"#text"のときはparentNodeを参照するようにする。

document.addEventListener('click', function(ev) {
  var target = ev.target;
  if ( target.nodeName === '#text' ) {
    target = target.parentNode;
  }
  // これならどれでもOK
  if ( target.nodeName === 'A' ) {
    console.log(target.href);
  }
}, false);

ちなみにjQueryのdelegationなら大丈夫です

$(document).on('click', 'a', function(ev) {
  console.log(this.href);
});