jquery绑定单击标签触发两次

时间:2013-02-08 15:21:58

标签: javascript jquery

当我为click事件添加一个select到label并绑定时,jquery会触发两次。

http://jsfiddle.net/d8Ax7/

HTML:

<label class="lol">
    <div>
        bla
    </div>
    <div style="display:none;">
        <select></select>
    </div>
</label>

的javascript:

$("label.lol").on({
    click : function ()
    {
        alert(1);
    }
})

如何在不向标签添加“for”属性的情况下修复此错误?

9 个答案:

答案 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>

http://jsfiddle.net/d8Ax7/1/

答案 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);
});

http://jsfiddle.net/d8Ax7/5/

答案 8 :(得分:0)

尝试使用CSS过滤:添加一个中间类clicked,以阻止第二个警报(或任何操作),然后移除.clicked为下一轮做好准备。

$("label.lol").on({
    click : function ()
    {
        if (! $(this).hasClass('clicked'))
            alert(1);
        $(this).toggleClass('clicked');
    }
})