イベント伝播の停止に問題があります。次のシナリオを想像してください。
<table id="test">
<tbody>
<tr>
<td class="row"> </td>
<td class="row"> </td>
<td class="row"> </td>
<td class="row"> </td>
<td class="row"> </td>
</tr>
<tr>
<td class="row"> </td>
<td class="row"> </td>
<td class="row"> </td>
<td class="row"> </td>
</tr>
</tbody>
</table>
そして、このコード:
(function(){
$('td.row').on('click', function(e){
if (! e.isPropagationStopped())
alert('Row clicked!');
});
$('table#test').on('click', 'img.live', function(e){
e.stopPropagation();
alert('Image clicked!');
});
$('td.row').html('<img src="http://fc03.deviantart.net/fs71/f/2011/161/f/c/nyan_cat_avatar_by_oxoxnaminemayxoxo-d3il6gm.gif" class="live">');
})();
画像がクリックされるたびに、両方のイベントが発生します。クリックした要素でイベントを発生させるだけです。それらはライブであるため、伝播が終了すると解雇されることは知っていますが、回避策はありますか?
私が調査した限りでは、両方のイベントは実質的に同じですが、 からにsrcElement
変わります。このクロスブラウザは一貫していますか?HTMLTableCellElement
HTMLImageElement
実際の動作を見たい場合に備えて、 jsFiddleにデモを入れました。