1

クリック ハンドラーをその要素を無効にする要素にバインドし、別のイベントを委任しようとすると、2 番目のイベントが発生しません。

これに対する簡単な解決策はありますか?

デモ

$('button').click(function() {
    log('first click fired');
    $(this).prop('disabled', true);
});
$('span').on('click', 'button', function() {
    log('second click fired');
});

HTML:

<span><button>click</button></span>

編集:

明確にするために、オブジェクト自体にクリックイベントを設定すると、この編集で見られるように発生します。委任でそれを実行できるようにしたい

4

1 に答える 1

4

無効化された要素は、マウス イベントを発生させません。

これらはマウス イベントを発生させないため、スパンへのイベント バブルは発生せず、イベント ハンドラーがトリガーされることもありません。

解決策は要素を無効にしないことであり、私が知る限りそれがほとんど唯一の解決策ですが、なぜこの動作が必要なのかを説明すると、誰かが回避策を手伝ってくれるでしょうか?

編集:

独自の委任を作成するとうまくいくようです:

$('span').on('click', function(e) {
    if (e.target.tagName.toLowerCase() === 'button')
        log('second click fired');
});

フィドル

于 2013-07-31T19:36:41.623 に答える