我會嘗試用簡單的代碼來解釋問題。如何覆蓋jQuery的事件處理程序
var fireClick = function() { alert('Wuala!!!') };
$('#clickme').click(fireclick);
$('#clickme').click(fireclick);
所以現在它會明顯提醒2次,但我只需要警報一次。嘗試了很多方法,但沒有結果。
謝謝。
我會嘗試用簡單的代碼來解釋問題。如何覆蓋jQuery的事件處理程序
var fireClick = function() { alert('Wuala!!!') };
$('#clickme').click(fireclick);
$('#clickme').click(fireclick);
所以現在它會明顯提醒2次,但我只需要警報一次。嘗試了很多方法,但沒有結果。
謝謝。
從jQuery 1.7開始,您應該使用off刪除事件處理程序,並使用on添加它們,儘管您仍然可以使用click
速記。
$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);
原來的答覆:
如果要更換所有點擊處理程序,調用unbind第一沒有一個函數參數。如果您想要替換所有事件處理程序,請不要指定事件類型。
$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);
我會嘗試消除額外的電話,但短期的tyhat你能確保每次調用這兩個:
$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);
您可以使用jQuery的功能unbind除去第一事件:
var fireClick = function() { alert('Wuala!!!') };
$('#clickme').click(fireclick);
$('#clickme').unbind('click', fireClick); // fireClick won't fire anymore...
$('#clickme').click(fireclick); // ...but now it will
您應該使用的setInterval。問題是你不能同時彈出兩個警報。首先人們必須關閉第一或第二個不能出現在屏幕上......
使用一個命名空間,以確保你不刪除任何其他聽衆:
$('#clickme').off('click.XXX').on('click.XXX', fireclick);
只要沒有其他代碼使用XXX
,你可以肯定你還沒有搞亂一些你不知道的其他行爲。
你能給出一些關於如何綁定事件的調用最終發生兩次的上下文嗎?也許你可以防止第二次調用改變代碼的功能。 – 2009-04-12 11:28:37
相關:http://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler-in-jquery – 2009-04-12 11:29:29
這就是「瞧瞧」。 :) – 2009-04-12 12:12:49