Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 one()函数在单击时触发两次_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Jquery one()函数在单击时触发两次

Javascript Jquery one()函数在单击时触发两次,javascript,jquery,ajax,Javascript,Jquery,Ajax,我的Jqueryone()函数在第二次单击而不是第一次单击后死亡。这是我的HTML <div class="box"> <div class="call" data-tai="5">CLICK</div> </div> 有趣的是,如果我不使用返回false,它在第一次单击后死亡。但是,冒泡会发生,它会在框元素中附加2个html标记,而不是1个。谢谢你的帮助 $('body div') 将选择这两个div并将单击处理程序附加到这两个div。当

我的Jquery
one()
函数在第二次单击而不是第一次单击后死亡。这是我的
HTML

<div class="box">
  <div class="call" data-tai="5">CLICK</div>
</div>
有趣的是,如果我不使用
返回false,它在第一次单击后死亡。但是,
冒泡
会发生,它会在
元素中附加2个html标记,而不是1个。谢谢你的帮助

$('body div')
将选择这两个div并将单击处理程序附加到这两个div。当您单击嵌套的div时,两次单击都将被触发。使用特定的选择器来避免这种情况

$('.call')
也许可以做到这一点

将选择这两个div并将单击处理程序附加到这两个div。当您单击嵌套的div时,两次单击都将被触发。使用特定的选择器来避免这种情况

$('.call')

可能可以实现这一点。

这是因为使用
绑定的事件处理程序。jQuery集合中的每个元素将触发一个
。由于
返回false
会停止事件的传播,因此如果单击
.call
元素,则不会执行父元素的单击处理程序,但父元素仍有一个活动的单击处理程序。您应该使用更具体的选择器来选择目标元素。如果单击处理程序应绑定到
div.call
元素:

$('.box div.call').one(...);
现在,如果
.box
元素有9个
div.call
子体,那么就有9个单击处理程序!单击每个元素后,jQuery将取消绑定该特定元素的处理程序

不是对所有元素都一次,而是对每个元素一次

如果应对所有匹配元素调用一次处理程序,则可以使用
的委派版本。one
方法:

$(document).one('click', '.box div.call', function() {
    // ...
});
如果要委派事件并使处理程序为动态生成的元素工作一次,则可以使用
.on
方法和
:not
选择器:

$(document).on('click', '.box .call:not(.clicked)', function() {
  $(this).addClass('clicked');
  // ...
});

现在,为每个
.call
元素调用一次处理程序。由于
:not
排除已单击的元素。单击的
类选择器与已单击的元素不匹配。

这是因为使用
绑定的事件处理程序。jQuery集合中的每个元素将触发一次一个
。由于
返回false
会停止事件的传播,因此如果单击
.call
元素,则不会执行父元素的单击处理程序,但父元素仍有一个活动的单击处理程序。您应该使用更具体的选择器来选择目标元素。如果单击处理程序应绑定到
div.call
元素:

$('.box div.call').one(...);
现在,如果
.box
元素有9个
div.call
子体,那么就有9个单击处理程序!单击每个元素后,jQuery将取消绑定该特定元素的处理程序

不是对所有元素都一次,而是对每个元素一次

如果应对所有匹配元素调用一次处理程序,则可以使用
的委派版本。one
方法:

$(document).one('click', '.box div.call', function() {
    // ...
});
如果要委派事件并使处理程序为动态生成的元素工作一次,则可以使用
.on
方法和
:not
选择器:

$(document).on('click', '.box .call:not(.clicked)', function() {
  $(this).addClass('clicked');
  // ...
});

现在,为每个
.call
元素调用一次处理程序。由于
:not
排除了已
单击的元素。因此,选择器与已单击的元素不匹配。

JavaScript中的事件气泡。你的代码

$('body div').one('click', '.call', function() {
}
两条电线都接上了

<div class="box"> <!-- This -->
  <div class="call" data-tai="5">CLICK</div> <!-- And this -->
</div>
问题是-您希望您的点击事件放置在哪里?也许是盒子类的div

$('div.box').one('click', '.call', function() {
}
这假设.call div被动态添加到.box div

另外,如果您想停止冒泡,我建议您将事件对象传递给您的click事件并调用stopPropagation()


JavaScript中的事件气泡。你的代码

$('body div').one('click', '.call', function() {
}
两条电线都接上了

<div class="box"> <!-- This -->
  <div class="call" data-tai="5">CLICK</div> <!-- And this -->
</div>
问题是-您希望您的点击事件放置在哪里?也许是盒子类的div

$('div.box').one('click', '.call', function() {
}
这假设.call div被动态添加到.box div

另外,如果您想停止冒泡,我建议您将事件对象传递给您的click事件并调用stopPropagation()


我必须使用
live
事件。因为以后会有很多
.call
元素,因为我的答案指向问题并提供了解决方案,你能接受这一答案吗?我必须使用
实时
事件。因为以后会有很多
。调用
元素因为我的答案指向了问题并提供了解决方案,你能接受这一答案吗?
body div
,我认为有两个div,所以两个div都会触发。请举个例子。如何使其更具体?
$('.box div.call')。一个(…)
可以工作,但不适用于新加入的
.call
元素。另一方面,
$(document).one('click','.box div.call',function()[})
只能工作一次。我的意思是,如果我单击一个
.box div.call
,事件不仅会对该元素死亡,而且对页面中的所有
.box div.call
元素都会死亡。是的,这就是它应该工作的方式,我会用另一个选项更新答案。
body div
,我认为有两个div,所以两个div都会触发。举个例子请问。我怎样才能使它更具体?
$('.box div.call')。一个(..)
可以工作,但不适用于新加入的
.call
元素。另一方面,
$(文档)。一个('click','.box div.call',function()[})
只工作一次。我的意思是,如果我单击一个
.box div.call
,事件不仅会对该元素,而且对页面中的所有
.box div.call
元素都会死亡。是的,这就是它应该工作的方式,我会用另一个选项更新答案。“我的Jquery
one()
函数在第二次单击而不是第一次单击后死亡。”无法复制。你能创建一个