簡體   English   中英

如何覆蓋 jquery 事件處理程序

[英]How to overwrite jquery event handlers

我會嘗試用一個簡單的代碼來解釋這個問題。

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);

使用命名空間確保您不會刪除任何其他偵聽器:

$('#clickme').off('click.XXX').on('click.XXX', fireclick);

只要沒有其他代碼使用XXX ,您就可以確定您沒有搞砸一些您不知道的其他行為。

您可以使用 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

我會嘗試消除額外的調用,但是如果沒有 tyhat,您可以確保每次都調用這兩個:

$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);
$(document).off('click', '#clickme').on('click', '#clickme', fireclick);

您應該使用 setInterval。 問題是您不能同時彈出兩個警報。 第一個必須先關閉,否則第二個無法出現在屏幕上...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM