2017-06-07 16 views
0

私のメインプログラム(このコードを修正できません)にはいくつかのjavascript関数があり、それらのいくつかは必要ありません。私は新しいJavaScriptを追加し、不要なイベントを無効にしたい(例えばonClick)。 私はこのようsomeething試してみました:要素からすべてのイベントを削除するHTML

function disableClickEvent(){ 
    var elems = document.body.getElementsByTagName("a"); 
    for (i = 0; i < elems.length; i++) { 
     for (var key in toDisableMap) { 
      if(elems[i].innerHTML == key){ 
       elems[i].unbind(); 
       break; 
      } 
     } 
    } 
} 

が、エラーが(コンソールで)があります:

jQuery.Deferred exception: a[i].unbind is not a function disableClickEvent 

私はunbindが無効なイベントのために正しい方法であることを確認していません。どのようにしてこの問題を解決することができますか?

+0

を削除されますか?あなたは[オフ]()を使用することができます – Curiousdev

+0

の代わりに[オフ()](http://api.jquery.com/off/) .Deferred例外:a [i] .offはすべての要素のjqueryオブジェクトを取得する関数 ' –

+0

@MilanChheda同じエラーがあります - 'jQuery(ja)jQueryバージョン1.7以上または同じ –

答えて

0

getElementsByTagNameによって返されたオブジェクトに対してjQueryメソッドを呼び出しています。 getElementsByTagNameはjQueryオブジェクトを戻しません。既存のコードに$(elems[i]).unbind();のいずれかを実行するか、$("a", "body")のようなアンカータグを見つけてから操作する必要があります

0

unbind()を使用するにはjQueryオブジェクトを使用する必要があります。

スニペットを更新してメソッドをjQueryの対応するものに変更しました。あなたはjQueryオブジェクトの$(elems [I])を使用する必要が

function disableClickEvent() { 
    var elems = $("a"); 
    elems.each(function() { 
     for (var key in toDisableMap) { 
      if ($(this).text() == key){ 
       $(this).prop('onclick',null).off('click'); 
       break; 
      } 
     } 
    }) 
} 
+0

エラー 'jQuery.Deferred exception:$(...)があります。テキストは関数disableClickEvent'ではありません –

+0

@ tombobbyああ私のせい。 '.text()'小文字にする必要があります –

+0

'unbind()'がうまくいくはずですか? 'onClick'イベントがまだそこにあるようです... –

0

$(document).ready(function(){ 
 
    $('a').click(function(){ 
 
    alert($(this).attr('id')); 
 
    }); 
 
}); 
 
function disableClickEvent(){ 
 
    var elems = document.body.getElementsByTagName("a"); 
 
    for (i = 0; i < elems.length; i++) { 
 
    $(elems[i]).off('click'); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a id="test1" style="cursor:pointer">Test1</a> 
 
<br> 
 
<a id="test2" style="cursor:pointer">Test2</a> 
 
<br> 
 
<button onclick="disableClickEvent()" value="Disable">Disable</button>

.Offを(使用)オフ( 'クリック')。

+0

'$(elems [i])。off( 'クリック');'イベントをクリーンアップしません(まだ 'onClick'アクションがあります) –

0

これが有効ならチェックしてください。$(elems[i]).removeAttr('onclick');を使用して、アンカータグからクリックイベントを削除してください。ボタンが押されたら、アンカータグからのクリックイベントは、uが使用してrはjqueryのバージョンの

function disableClickEvent(){ 
 
    
 
    var elems = document.body.getElementsByTagName("a"); 
 
    for (i = 0; i < elems.length; i++) { 
 
      
 
     $(elems[i]).removeAttr('onclick'); 
 
      
 
     /* for (var key in toDisableMap) { 
 
      if(elems[i].innerHTML == key){ 
 
       elems[i].unbind(); 
 
       break; 
 
      } 
 
     }*/ 
 
    } 
 
} 
 

 
function clickevent(event){ 
 
    event.preventDefault(); 
 
    console.log("clicked") 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button onclick="disableClickEvent()"> Remove events </button> 
 

 
<a href="" onclick="clickevent(event)">Anchor tag click</a>

関連する問題