1114

私は持っていinput type="image"ます。これは、Microsoft Excel のセル ノートのように機能します。これinput-imageと対になっているテキスト ボックスに誰かが数値を入力すると、input-image. 次に、ユーザーが をクリックするimageと、データにメモを追加するための小さなポップアップが表示されます。

私の問題は、ユーザーがテキスト ボックスにゼロを入力したときに、input-imageのイベント ハンドラーを無効にする必要があることです。私は次のことを試しましたが、役に立ちませんでした。

$('#myimage').click(function { return false; });
4

19 に答える 19

1734

jQuery ≥ 1.7

jQuery 1.7 以降では、イベント API が更新されました。/ は.bind()下位.unbind()互換性のために引き続き使用できますが、推奨される方法はon() / off()関数を使用することです。以下は、

$('#myimage').click(function() { return false; }); // Adds another click event
$('#myimage').off('click');
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
$('#myimage').off('click.mynamespace');

jQuery < 1.7

サンプル コードでは、前のクリック イベントを上書きするのではなく、画像に別のクリック イベントを追加するだけです。

$('#myimage').click(function() { return false; }); // Adds another click event

その後、両方のクリック イベントが発生します。

人々が言っ​​たように、 unbind を使用してすべてのクリック イベントを削除できます。

$('#myimage').unbind('click');

単一のイベントを追加してから削除したい場合 (追加された可能性のある他のイベントを削除せずに)、イベントの名前空間を使用できます。

$('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });

イベントだけを削除するには:

$('#myimage').unbind('click.mynamespace');
于 2008-10-16T21:13:55.117 に答える
64

この質問に回答した時点では利用できませんでしたが、live()メソッドを使用してイベントを有効/無効にすることもできます。

$('#myimage:not(.disabled)').live('click', myclickevent);

$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });

このコードでは、#mydisablebutton をクリックすると、disabled クラスが #myimage 要素に追加されます。これにより、セレクターが要素と一致しなくなり、「無効な」クラスが削除されて .live() セレクターが再び有効になるまでイベントが発生しなくなります。

これには、そのクラスに基づいてスタイルを追加するという他の利点もあります。

于 2009-07-23T17:57:10.947 に答える
40

これは unbind 関数を使用して行うことができます。

$('#myimage').unbind('click');

jquery では、同じオブジェクトとイベントに複数のイベント ハンドラーを追加できます。つまり、新しいものを追加しても、古いものは置き換えられません。

イベント名前空間など、イベント ハンドラーを変更する方法はいくつかあります。オンライン ドキュメントには、これに関するページがいくつかあります。

この質問を見てください(それが私がバインド解除について学んだ方法です)。回答には、これらの戦略の有用な説明がいくつかあります。

jqueryでバインドされたホバーコールバック関数を読み取る方法

于 2008-10-16T15:35:09.747 に答える
36

おそらくアンバインド方法があなたのために働くでしょう

$("#myimage").unbind("click");
于 2008-10-16T15:31:02.110 に答える
31

prop と attr を使用して、イベントを null に設定する必要がありました。私はどちらか一方ではそれを行うことができませんでした。また、.unbind を機能させることもできませんでした。私はTD要素に取り組んでいます。

.prop("onclick", null).attr("onclick", null)
于 2012-03-28T14:44:31.650 に答える
14

イベントがこの方法でアタッチされ、ターゲットがアタッチされていない場合:

$('#container').on('click','span',function(eo){
    alert(1);

    $(this).off(); //seams easy, but does not work

    $('#container').off('click','span'); //clears click event for every span

    $(this).on("click",function(){return false;}); //this works.

});​
于 2012-06-26T13:02:06.530 に答える
11

onclickハンドラーをインライン マークアップとして追加している可能性があります。

<input id="addreport" type="button" value="Add New Report" onclick="openAdd()" />

その場合、jquery .off()or.unbind()は機能しません。jquery にも元のイベント ハンドラを追加する必要があります。

$("#addreport").on("click", "", function (e) {
   openAdd();
});

次に、jquery にはイベント ハンドラーへの参照があり、それを削除できます。

$("#addreport").off("click")

VoidKing は、上記のコメントでこれについてもう少し斜めに言及しています。

于 2014-01-21T22:25:16.247 に答える
7

情報のおかげで。別のユーザーによる編集モードでのページ操作のロックに使用しました。ajaxComplete と組み合わせて使用​​しました。必ずしも同じ動作ではありませんが、多少似ています。

function userPageLock(){
    $("body").bind("ajaxComplete.lockpage", function(){
        $("body").unbind("ajaxComplete.lockpage");
        executePageLock();      
    });
};  

function executePageLock(){
    //do something
}
于 2010-07-02T21:54:25.443 に答える