click()事件在jquery中调用两次

dom*_*lao 106 jquery

我在jquery中设置了一个link元素并调用了它的click事件,但click事件调用了两次,请参阅下面的jquery代码.

$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});
Run Code Online (Sandbox Code Playgroud)

请指教.

谢谢.

Sco*_*ott 218

确保并检查您是否在HTML页面中不小心包含了两次脚本.

  • 我只是看着这个解决方案并笑着想"​​我不是那么愚蠢"......事实证明我做到了这一点.非常感谢. (18认同)

The*_*tem 73

点击之前解除绑定;

$("#link_button").unbind('click');
$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});
Run Code Online (Sandbox Code Playgroud)

  • 这只是每次动态修复错误,而不是真正的解决方案.它可以帮助我,但是你应该找到真正的问题并永久修复. (3认同)
  • 在我的情况下,它真的很有用,因为在一些 ajax 调用之后,我需要用我的事件多次调用方法,它开始变得过度点击(我不知道这个词是否存在)。对于我的情况,这意味着一个解决方案。 (2认同)

Nal*_*ran 48

这意味着您的代码包含两次jquery脚本.但试试这个:

$("#btn").unbind("click").click(function(){

//your code

});
Run Code Online (Sandbox Code Playgroud)


小智 33

我试过了 e.stopImmediatePropagation(); 这似乎对我有用.


Upe*_*dra 18

在我的情况下,我使用下面的脚本来克服这个问题

$('#id').off().on('click',function(){
    //...
});
Run Code Online (Sandbox Code Playgroud)

off()取消绑定所有绑定的事件#id.如果您只想取消绑定click事件,请使用off('click').


Shr*_*vas 8

只需在调用.on()之前调用.off().

这将删除所有事件处理程序:

$(element).off().on('click', function() {
// function body
});
Run Code Online (Sandbox Code Playgroud)

要仅删除已注册的"点击"事件处理程序:

$(element).off('click').on('click', function() {
// function body
});
Run Code Online (Sandbox Code Playgroud)


dem*_*lem 7

两次点击问题的一个相当常见的解决方案是放置

e.stopPropagation()
Run Code Online (Sandbox Code Playgroud)

在你的功能结束时(假设你使用function(e)它).这可以防止事件冒泡,这可能导致第二次执行该功能.


小智 5

我遇到了同样的问题,但是您可以尝试更改此代码

$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});
Run Code Online (Sandbox Code Playgroud)

对此:

$("#link_button").button();
$("#link_button").unbind("click").click(function () {
   $("#attachmentForm").slideToggle("fast");
});
Run Code Online (Sandbox Code Playgroud)

对我来说,这段代码解决了这个问题。但是请注意不要在HTML页面中意外地两次包含脚本。我认为,如果您正确执行了这两件事,您的代码将正常工作。谢谢


Chr*_*rds 5

e.preventDefault();在我的函数开始处添加对我有用。