鍍金池/ 問答/Java  HTML/ jquery的.on如何對(duì)每個(gè)元素只觸發(fā)一次?

jquery的.on如何對(duì)每個(gè)元素只觸發(fā)一次?

$("#aaa").on("input propertychange","input", function() {
    
});

如何對(duì)每個(gè)input元素(包括后面生成的input)只觸發(fā)一次?
回答
編輯回答
心悲涼
  1. 首先,在這個(gè)需求里,每個(gè)input可能會(huì)出現(xiàn)狀態(tài)不一致的情況(有的是“已觸發(fā)”,而有的是“未觸發(fā)”),所以這種情況下,要么把事件分別綁定到各個(gè)input上(即放棄事件代理),要么仍然保留代理,但給每個(gè)input都設(shè)置一個(gè)狀態(tài)指示(推薦使用data-*自定義屬性,jQ有現(xiàn)成的API可以支持)
  2. 綁定到各個(gè)input上的方案,可以用.one()來綁定事件;或者使用.on(),然后在回調(diào)里用$(this)+.off()掉這個(gè)事件就行了。當(dāng)然嫌事件名太長的話,可以加命名空間
  3. 以上注意新生成的input里需要再綁一遍事件,當(dāng)然可以把回調(diào)寫成具名函數(shù),這樣綁起來相對(duì)簡you單ya些。
  4. 如果仍然堅(jiān)持代理方案,那就需要在每個(gè)input上都加個(gè)狀態(tài)變量了,即在回調(diào)里加入類似$(this).data('do')這樣的語句,執(zhí)行前判斷一下它的值,如果執(zhí)行過就直接跳出回調(diào)就好了。
2017年5月26日 22:42
編輯回答
尐懶貓

.off() 解綁,在觸發(fā)后 在內(nèi)部把觸發(fā)元素的事件解綁 就可以了

2017年7月30日 09:13
編輯回答
歆久

使用.one

$("#aaa").one("input propertychange","input", function() {
    
});
2017年11月9日 05:31
編輯回答
清夢

那你只有自己記錄哪些節(jié)點(diǎn)被點(diǎn)過了,使用 .one 肯定不行。

$("#aaa").on("input propertychange", "input", function(event) {
  if (event.target.classList.contains('clicked')) {
    return;
  }
  event.target.classList.add('clicked');

  // do what you need to do
});
2017年9月21日 17:33
編輯回答
雨萌萌
var b=0
$("#aaa").on("input propertychange","input", function() {

if(b==1)
{
}
else
{
//你的代碼
b=1
}
    
});
2017年2月24日 08:07