当我为click事件添加一个select到label并绑定时,jquery会触发两次。
HTML:
<label class="lol">
<div>
bla
</div>
<div style="display:none;">
<select></select>
</div>
</label>
的javascript:
$("label.lol").on({
click : function ()
{
alert(1);
}
})
如何在不向标签添加“for”属性的情况下修复此错误?
答案 0 :(得分:5)
我知道这个问题已经有很多答案,但是含糊不清。
$("label.lol").on({
click : function ()
{
alert(1);
return false;
}
});
好的,大家都很感激。问题解决了。但问题出现了为什么return false;
。
用简单的单词回答:这是告诉计算机从函数返回的一种方式,我给你的任务完成了。现在不再乱了。
答案 1 :(得分:2)
您可以尝试使用标签的“for”属性将其链接到其外部的选择。看我的例子
<label for="test" class="lol">
<div>
bla
</div>
</label>
<div style="display:none;">
<select id="test"></select>
</div>
答案 2 :(得分:0)
$("label.lol").off("click").on(//...
但是如果它发射两次肯定意味着你已经绑定了两次,所以使用.off比你问题的最佳解决方案更容易理解,这将是你理解你最终如何结束这次事件两次......&amp;当然,你展示的代码并不能解释这种双重束缚
编辑:&amp;在你的小提琴中它确实只触发一次...
答案 3 :(得分:0)
这种方式也有效,但我还不完全明白你要做什么...... 标签应该只包含选择的标签文本而不包含选择自己..
$("label.lol div:first").on({
click : function ()
{
alert(1);
}
})
答案 4 :(得分:0)
覆盖点击时有两个选项可以查看此stack overflow问题以获取更多详细信息,但总结一下,请尝试此操作...
$("label.lol").click(function () {
alert(1);
return false;
});
答案 5 :(得分:0)
你的标记很可怕..你的问题是jquery正在你的标签函数中的每个div上进行click事件 - 意味着两次。你应该清理你的标记并直接询问你想要点击的div。 否则使用:首先确保事件只被触发一次:
$('.lol div:first').click(function ()
{
alert("1");
})
答案 6 :(得分:0)
您应该添加e.preventDefault();
$("label.lol").on({
click : function (e)
{
alert(1);
e.preventDefault();
}
});
答案 7 :(得分:0)
你的问题在于你对元素之间的区别。你应该用:first-child
选择器选择标签的第一个孩子,或者给它id
:
<强> HTML:强>
<label class="lol">
<div id="first-child">
bla
</div>
<div style="display:none;">
<select></select>
</div>
</label>
<强> JS:强>
$("#first-child").on('click',function (){
alert(1);
});
答案 8 :(得分:0)
尝试使用CSS过滤:添加一个中间类clicked
,以阻止第二个警报(或任何操作),然后移除.clicked
为下一轮做好准备。
$("label.lol").on({
click : function ()
{
if (! $(this).hasClass('clicked'))
alert(1);
$(this).toggleClass('clicked');
}
})