실제로 일회성 이벤트를 추가해야하는데, 이는 one 메소드를 사용하여 해결할 수 있습니다.
다음과 같은 기능을 달성하세요. 이름이 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'] 요소가 있습니다. 클릭 이벤트는 위임을 통해 문서에 바인딩됩니다.
해결 방법: 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()); }
delegate 대신 on을 사용하세요
<div id="target">test</div><script type="text/javascript">$('#target').on('click', function() { var self = $(this); alert(self.text()); self.off('click'); });
on이 현재 및 미래 요소를 관리합니다. , 괜찮습니다 범위를 지정하고 선택기를 지정하고 이벤트 수를 줄이고 순회 속도를 높이십시오.
bind, live, Delegate는 1.9 이후 더 이상 권장되지 않으며, 이제 하나만 On으로 모두 대체할 수 있습니다~
//举个例子 $(document).ready(function(){ $("body").delegate("p","click",function(){ //do some }); $("button").click(function(){ $("body").undelegate(); }); });
위 내용은 jquery는 위임 취소를 사용하여 위임을 사용하여 동적으로 생성된 요소에 바인딩된 이벤트를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!