12

.live()( jQueryの関数を使用して)リンクイベントにバインドしてから、純粋なJSとHTML(のように)を使用しclickてイベントハンドラーを手動で追加します。メソッドへのイベントのバブリングを防ぎたいのですが、方法がわかりません。onclick<a href="".... onclick="some action">live

この状況ではおそらくe.stopPropagation()役に立ちますが、追加されたイベントハンドラーonclickは純粋なJSで記述されてstopPropagation()おり、jQuery要素ラッパーの外部から呼び出すことはできません。return falseこの状況では機能しません。代用return falseしてみまし$.Event('click').stopPropagation()たが、うまくいかなかったので間違っていると思います。

live()jQueryラッパーなしでメソッドへのバブリングを防ぐ方法は?

4

2 に答える 2

15

return false「通常の」イベントハンドラーではイベントのバブリングも防止されると思い込んでいましたが、間違っていました(@Mrchiefに感謝)。

quirksmode.orgで説明されているように、それを止める方法は他にもあります。

function doSomething(e)
{
    if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}

cancelBubbleIE用でstopPropagation、すべてのW3C互換ブラウザで動作します。

于 2011-08-17T16:14:35.710 に答える
2

.liveを使用すると、伝播を停止できません。これは、を使用する.liveと、イベントハンドラーがDOMツリーのルートにバインドされるためです。したがって、ハンドラーを呼び出す前に、イベントを最上位の要素までバブルする必要があります。を使用する際の注意点の1つです.live

.delegateを使用するか(ハンドラーを永続化する場合)、代わりに.bindを使用することを検討してください。

ライブハンドラーを完全に無効にする場合は、dieを使用します。

$("#myHref").die("click", aClick); // this will remove any existing event handlers
$("#myHref").click(yourhandler);   // add your handler

デモ1:JsFiddle 1

または、インラインハンドラーを追加します(そしてそこからイベントをキャンセルします)。

<a href=".." onclick="yourhandler">

デモ2:JsFiddle 2

インラインハンドラーは、常にjqueryイベントハンドラーの前に最初に呼び出されます。

于 2011-08-17T15:59:36.087 に答える