这会导致多个按钮执行操作:
$(document).on("click", ".file-this-email", fileThisEmail);
当fileThisEmail
运行时,我想将其从当前的一个中移除(页面上还有其他人仍然需要它):
window.fileThisEmail = function(e) {
console.log('this was clicked');
}
我尝试了off
,但似乎无法做到正确。有什么想法吗?
答案 0 :(得分:6)
在这种情况下,您必须使当前元素不再与".file-this-email"
选择器匹配。
$(document).on("click", ".file-this-email", function() {
console.log('this was clicked');
$(this).removeClass("file-this-email");
});
另一种方法是使用相同的概念向选择器添加过滤器。
$(document).on("click", ".file-this-email:not(.clicked)", function() {
console.log('this was clicked');
$(this).addClass("clicked");
});
或者,不要在这种特殊情况下使用委托。委托不是一种取代直接绑定的新技术,它只是绑定事件的另一种方式。如果使用正确,它可以使代码更有效。反之亦然;如果使用不当,可能会使代码非常膨胀。
$(".file-this-email").on("click", function () {
console.log("this was clicked");
$(this).off("click");
});
// or even better (thanks @overachiever):
$(".file-this-email").one("click", function () {
console.log("this was clicked");
});
答案 1 :(得分:0)
.one()方法对此有好处。 http://api.jquery.com/one/
$(document).ready(function(){
$('.file-this-email').one('click', fileThisEmail);
});
答案 2 :(得分:0)
将各个处理程序绑定到每个元素:
$(".file-this-email").one("click",fileThisEmail);
答案 3 :(得分:0)
你应该做的是
$(document).on("click", ".file-this-email", fileThisEmail);
将此更改为
$(document).ready(function(){
$(".file-this-email").on("click",fileThisEmail);
$(".file-this-email").click(function(){
$(this).off("click",fileThisEmail);
});
});