Javascript Jquery:如何防止多次运行?

Javascript Jquery:如何防止多次运行?,javascript,jquery,Javascript,Jquery,对不起,我的英语不是以英语为母语的 我的代码有问题。我在第页上有这样的内容: $('#hook label').on('click', function(ev) { ev.preventDefault(); console.log('ok'); icon = $(this).next('input').val(); }); $(“#钩子标签”)。在('click',function()上{ console.log('ok'); icon=$(this.next('in

对不起,我的英语不是以英语为母语的

我的代码有问题。我在第页上有这样的内容:

$('#hook label').on('click', function(ev) {
    ev.preventDefault();
    console.log('ok');
    icon = $(this).next('input').val();
});
$(“#钩子标签”)。在('click',function()上{
console.log('ok');
icon=$(this.next('input').val();
});


如果要防止事件被触发两次,可以使用“mousedown”事件处理程序。它只会被触发一次,因为它不是通过单击标签由standard触发的。

如果要防止事件被触发两次,可以使用“mousedown”事件处理程序。它只会被触发一次,因为它不是由标准通过单击标签触发的。

这是因为标签的默认行为。要停止此操作,您需要告诉事件对象停止是默认行为,如下所示:

$('#hook label').on('click', function(ev) {
    ev.preventDefault();
    console.log('ok');
    icon = $(this).next('input').val();
});

单击与
属性的
关联的标签或标签内部,使用“假”单击事件聚焦输入。这就是为什么会两次获得事件,因为通过扩展,如果单击输入,也会单击标签(父项)。

这是因为标签的默认行为。要停止此操作,您需要告诉事件对象停止是默认行为,如下所示:

$('#hook label').on('click', function(ev) {
    ev.preventDefault();
    console.log('ok');
    icon = $(this).next('input').val();
});

单击与
属性的
关联的标签或标签内部,使用“假”单击事件聚焦输入。这就是为什么会两次获得事件,因为通过扩展,如果单击输入,也会单击标签(父项)。

您只需要添加一个preventDefault()


我希望它能帮助您。

您只需要添加一个preventDefault()


我希望它能对您有所帮助。

这是两次,因为当您单击标签时,它也会将一个单击事件发送到输入,而新事件会跳回标签。这很棘手:)

它在所有浏览器中都有,以获得更好的表单可用性

因此,另一个可能的解决方案是:

$('label').click(function(e) {
    if (e.target.tagName === "LABEL") {
        alert("!! here")
    }
});

现场试用:

这是两次,因为当你点击标签时,它也会向输入发送一个点击事件,新事件会跳回标签。这很棘手:)

它在所有浏览器中都有,以获得更好的表单可用性

因此,另一个可能的解决方案是:

$('label').click(function(e) {
    if (e.target.tagName === "LABEL") {
        alert("!! here")
    }
});


现场试用:

图像是否重叠?否。标签是块,图像在块中。旁注:我不认为
next
是该代码中的正确方法。应该是
find
@epascarello,这个代码不错。这只是从输入元素中检索值,这不是运行两次的原因。好的,我将更改它以查找。
$(this)
是被标记的标签,
next()
查看下一个同级,它将是一个标签。输入不是同级,而是子级。图像是否重叠?否。标签是块,图像在块中。旁注:我不认为
next
是该代码中的正确方法。应该是
find
@epascarello,这个代码不错。这只是从输入元素中检索值,这不是运行两次的原因。好的,我将更改它以查找。
$(this)
是被标记的标签,
next()
查看下一个同级,它将是一个标签。输入不是同级,而是子级。@Swatto提供的答案显示了代码的复杂性。如果你可以通过阻止默认行为来正确操作,那么为什么要使用hacks呢?@Swatto提供的答案向你展示了代码的复杂性。如果你可以通过阻止默认行为来正确操作,那么为什么要使用黑客呢?preventDefault也会阻止复选框被选中,如果需要的话,当然,要像这样操作鼠标按下会让用户感到困惑,在这种情况下鼠标向上会更好,但它仍然是一种黑客行为是的,这是正确的。这是一个相关的问题,虽然这是一个解决方案,但我认为解释一下这到底是如何发生的也很好。标签内的输入也从标签父项接收
单击
事件。@SergiuParaschiv显然,标签与输入是联合的,但我也想看到一些资源来解释这一点。我编辑了我的响应,以便更准确地描述这一行为。谢谢你的建议。这是可行的,但是它会阻止单选按钮被选中是的,这是正确的。这是一个相关的问题,虽然这是一个解决方案,但我认为解释一下这到底是如何发生的也很好。标签内的输入也从标签父项接收
单击
事件。@SergiuParaschiv显然,标签与输入是联合的,但我也想看到一些资源来解释这一点。我编辑了我的响应,以便更准确地描述这一行为。谢谢你的建议。这是可行的,但是它会阻止单选按钮被选中