Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery在第一次单击后解除绑定_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript jQuery在第一次单击后解除绑定

Javascript jQuery在第一次单击后解除绑定,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,这会导致多个按钮执行操作: $(document).on("click", ".file-this-email", fileThisEmail); 当fileThisEmail运行时,我只想将其从当前文件中删除页面上还有其他人需要它: window.fileThisEmail = function(e) { console.log('this was clicked'); } 我试过了,但似乎做不好。有什么想法吗?在这种情况下,您必须使当前元素不再与此电子邮件选择器的.file匹配 $(

这会导致多个按钮执行操作:

$(document).on("click", ".file-this-email", fileThisEmail);
当fileThisEmail运行时,我只想将其从当前文件中删除页面上还有其他人需要它:

window.fileThisEmail = function(e) {
  console.log('this was clicked');
}

我试过了,但似乎做不好。有什么想法吗?

在这种情况下,您必须使当前元素不再与此电子邮件选择器的.file匹配

$(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");
});

有一种方法很好


将各个处理程序绑定到每个元素,如下所示:

$(".file-this-email").one("click",fileThisEmail);
你应该做的是

$(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);
  });
 });

你是怎么试的?像这样$this.off'click'?使用委托选择器绑定到文档不会将处理程序绑定到单个元素。唯一的处理程序是文档上的处理程序,它负责处理与选择器匹配的所有元素上的事件。这被称为事件委派,在使用它之前了解它的工作原理是一个好主意。感谢您的反馈。虽然我理解你的观点,但我认为在使用它之前了解它的工作原理是一个好主意,这正是互联网上的论坛受到不好评价的原因。如果是这样的话,任何技术人员都不会有任何成就。他们会忙于阅读文档。我已经成功地使用它很多年了,但没有涉及到这个细节。完全同意。如果我说的话让人觉得我是在嘲笑学习基础知识的想法,那我一定是说错了。很抱歉,这是我收到的信息。在我的日常工作中,像这样复杂的事情我用得不够多。我已经回去过几次,试图真正理解其中的一些东西,但出于这样或那样的原因,它并没有坚持下去。我希望结果会有所不同:问一个问题,然后似乎会因为问而受到惩罚,这只是一个令人沮丧的问题。虽然我相信这不是你真正想做的,但这就是我的理解:/然后我道歉。我最初的评论实际上只是想传达这样一个信息,即在使用事件委派之前了解事件委派是一个好主意,因为这是一个需要理解的重要基本概念。最后一个带有off的注释可能会解除其他单击事件的绑定,因为您没有指定原始回调或名称空间非常正确。一个是比最后一个更好的选择case@sphanley,我打算使用.one,而不是.on。我选择:$document.oneclick、.pipelinedeals文件此电子邮件,function{};b/c呈现时,元素还不在页面上。但其中一个观点是正确的。谢谢我不认为这是您想要的行为,因为$document.oneclick只会在每个文档中触发一次,而不是在每个.pipelinedeals文件中触发一次此电子邮件感谢您指出它绑定到文档将导致它仅在该选择器上第一次发生。我编辑来修复它。奇怪的是。。。这似乎是他所采用的解决方案,但这似乎不是他所要求的*迷茫*
$(document).ready(function(){
  $(".file-this-email").on("click",fileThisEmail);
  $(".file-this-email").click(function(){
    $(this).off("click",fileThisEmail);
  });
 });