其实是需要添加一次性事件,原本用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事件,绑定成功,需要在点击一次后,再次点击不再触发事件;
解决方法:
$(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());
}