5

タイトルにあるように、特定の OnClick を無効にしようとしています

<div id="test" style="display: block; opacity: 0.89;"></div>

このdiv は、難読化された外部スクリプトから読み込まれるため、特定のコードを見ることができません。

これを削除しようとしたこと

$("#test").click(function(){ return false});
$("#test").unbind();
$("#test").removeAttr("onclick");
//Suggestions which do not work
$('#test').on('click', function(e) {e.preventDefault();return false;});
$("#test").click(function(event){
event.preventDefault();
});

上記のいずれも機能しません。

編集: .unbind("click"); を使用して問題を解決しました。divが作成された後。

4

7 に答える 7

14

あなたは付け加えられますoff("click");

フィドル

$(function () {
    $("#test").click(function(){alert('test');});
    $("#test").off('click');

});

このコードは、以前に追加されたクリック イベントを削除する方法を示しています。

于 2013-10-11T14:12:52.463 に答える
8

シンプルなフォーム、jquery と javascript の組み合わせ。

// To disable:    

$('#test').each(function (){
    this.style.pointerEvents = 'none'; 
}); 

// To re-enable:
$('#test').each(function (){
    this.style.pointerEvents = 'auto'; 
}); 

したがって、複数のタグのセレクターを変更できます

于 2016-06-10T10:16:22.723 に答える
6

div がページに追加される前にそれらを使用すると、試したオプションはどれも機能しません。そのため、div を作成する他のスクリプトの後のどこかにコードを配置してください。

複数の要素が同じ ID を持つ場合、それも問題になります。

あなたが試した個々の方法について:

$("#test").click(function(){ return false});
$("#test").unbind();
$("#test").removeAttr("onclick");

最初の行は、デフォルトの動作を防ぎ、イベントの伝播を停止する要素に新しいクリック ハンドラーを追加ますが、要素にバインドされている他のイベント ハンドラーの実行を停止しません。特に、それらが新しいハンドラーの前に実行される場合は、明らかに.

2 行目は、jQuery でアタッチされたイベント ハンドラーを削除しますが、他の方法でアタッチされたハンドラーは削除しません。

3 行目は、インラインonclick属性が存在する場合は削除しますが、jQuery で追加されたハンドラーは削除しません。

div がページに追加された後にコードが実行されることを確認した後でもクリック動作を停止できないと仮定すると、次のようなことを試すことができます。

var $test = $("#test").removeAttr("onclick"),
    $contents = $test.contents().detach();
$test.replaceWith($test.clone(false).append($contents));

デモ: http://jsfiddle.net/A9tmu/3/

.clone(false)クローンされたバージョン ( で作成された場合) はイベント ハンドラーを保持しないため、要素をそれ自体のクローンに置き換えるという考え方があります。子要素がイベント ハンドラーを保持できるように、クローンを作成する前に一時的に div コンテンツを切り離しています。

于 2013-10-11T14:27:17.033 に答える