回答:
古い方法(1.7より前):
$("...").attr("onclick", "").unbind("click");
新しい方法(1.7以上):
$("...").prop("onclick", null).off("click");
(必要なセレクターに置き換えてください。)
Removing an inline onclick event handler using .removeAttr() doesn't achieve the desired effect in Internet Explorer 6, 7, or 8. To avoid potential problems, use .prop() instead
.prop()
IE11にも使用する必要がありました。
私はこれがかなり古いことを知っていますが、失われた見知らぬ人が(私がしたように)答えを探すためにこの質問を見つけたとき、これはremoveAttr()を使用する代わりに、それを行う最善の方法です:
$element.prop("onclick", null);
jQuerys公式ドクを引用:
「.removeAttr()を使用してインラインのonclickイベントハンドラーを削除しても、Internet Explorer 6、7、または8では望ましい効果が得られません。潜在的な問題を回避するには、代わりに.prop()を使用してください。」
<span onlick="method()">sometext>/span>
イベントは完全にバインドされておらず、うまく機能しています
onclick
プロパティを削除しています次のように、クリックイベントをインラインで追加したとします。
<button id="myButton" onclick="alert('test')">Married</button>
その後、次のようにイベントを削除できます。
$("#myButton").prop('onclick', null); // Removes 'onclick' property if found
click
イベントリスナーの削除次のように、イベントリスナーを定義してクリックイベントを追加したとします。
$("button").on("click", function() { alert("clicked!"); });
...またはこのように:
$("button").click(function() { alert("clicked!"); });
その後、次のようにイベントを削除できます。
$("#myButton").off('click'); // Removes other events if found
イベントの追加方法がわからない場合は、次のように両方を組み合わせることができます。
$("#myButton").prop('onclick', null) // Removes 'onclick' property if found
.off('click'); // Removes other events if found
jquery 1.7を使用している場合
$('html').off('click');
そうしないと
$('html').unbind('click');
removeAttrを使用すると、非常に簡単です。
$(element).removeAttr("onclick");
bind、unbind、on、off、click、attr、removeAttr、propで一生懸命試した後、私はそれを機能させました。だから、私は次のシナリオを持っています:私のhtmlにはインラインのonclickハンドラーをアタッチしていません。
次に、Javascriptで次を使用してインラインのonclickハンドラーを追加します。
$(element).attr('onclick','myFunction()');
これを後でJavaScriptから削除するために、以下を使用しました。
$(element).prop('onclick',null);
これが、JavaScriptで動的にクリックイベントをバインドおよびバインド解除する方法でした。要素にインラインのonclickハンドラーを挿入しないでください。
.on('click', myFunction)
(ノートmyFunction
でない引用符で)をしてから、後で、.off('click')
onclickイベントが直接要素ではなく親要素から発生した場合はどうなりますか?これはうまくいくはずです:
$(".noclick").attr('onclick','').unbind('click');
$(".noclick").click(function(e){
e.preventDefault();
e.stopPropagation();
return false;
});