其實是需要新增一次事件,原本用one方法,就可以解決。
實現這樣的功能,如:name為abc開始的a元素 第一次點擊時輸出它的內容
$("a[name^='abc']").one(function( console.log($(this).html()); ));
但是one方法不支援動態建立的元素。所有用delegate
$(document).delegate("a[name^='abc']","click",function(){ console.log($(this).html()); //这里我需要点击一次后 再删除此click绑定 $(document).undelegate($(this),"click"); //这句不管用 $(this).undelegate("click"); //也不管用 //手册上说undelegate第一个参数需要指定一个单独的selector, //a[name^='abc']取到的是一个元素集,用它后会删除掉所有绑定。 //没有被点过的也删除了。求解,我只需要被点一次后的元素删除click事件})
樓主的意思應該是: 頁面有多個a[name=^'abc']的元素, 透過委託在document綁定了click事件,綁定成功,需要在點擊一次之後,再點擊不再觸發事件;
解決方法: 1. 利用$object.data()儲存數據,判斷是否被點擊過;
$(document).on('click', 'a[name^="abc"]', function(e) { //委托,实现绑定click事件 if (!$(this).data('clicked')) { //判断是否已经被点击, // 第一次点击因为 $(this).data('click')为 undefined linkClickHandler.call(this); //调用处理函数 $(this).data('clicked', true); //设置 "已点击" } return false; //返回false,阻止默认行为,因为 <a>自动跳转 });function linkClickHandler() { // 事件处理函数 // 函数中的this指向触发的元素 , 为 DomElement类型 //TODO console.log($(this).text()); }
用on 不要用delegate了
<div id="target">test</div><script type="text/javascript">$('#target').on('click', function() { var self = $(this); alert(self.text()); self.off('click'); });
on包辦現在和未來的元素,還可以指定範圍,指定seletor,減少事件數量,提高遍歷速度,棒棒噠。
bind, live, delegate在1.9後就已經不推薦了,現在只要一個on代替曾經所有~
//举个例子 $(document).ready(function(){ $("body").delegate("p","click",function(){ //do some }); $("button").click(function(){ $("body").undelegate(); }); });
以上是jquery如何使用undelegate去掉用delegate為動態建立元素綁定的事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!