gpt4 book ai didi

JQuery 和事件冒泡...再次

转载 作者:行者123 更新时间:2023-12-01 03:55:18 25 4
gpt4 key购买 nike

我大致正在处理以下内容:

var i;
var k = 5;
$('document').ready(function () {
$('#someElement').click(function (e) {
e.stopImmediatePropagation();
i++;
if (i >= k) {
my_function();
});
}
});
my_function() {
alert(i);
$('#myDisplay').text("You have clicked on '#someElement' " + i + "times");
}

当我点击“#someElement”时,“my_function()”会按预期触发,但警报框会弹出 5 次!!!。

一个快速而明显的解决方案是放置 my_function() 的内容并将它们放入附加到“#someElement”的 if 控制语句中,但我非常热衷于保留我概述的结构,并且确信有一个简单的方法可以做到这一点。

有什么想法吗?

更新

我最初认为问题出在“点击”事件中的函数调用上。事实并非如此,我认为问题可能与嵌套的“ajaxComplete”调用有关:

var i = 0;

$('document').ready(function () {

$('<div id="someElement">Click me</div>').appendTo('body');
$('<div id="myDisplay"></div>').appendTo('body');
$('#someElement').click(function (e) {
i++;
$.get("test.html", function(html)
{
$(html).ajaxComplete(function()
{
my_function(i);
});
});

});

});

function my_function(n)
{

switch (n)
{

case 1:
alert(n);
$('#myDisplay').text("this is case " + n);
break
case 2:
alert(n);
$('#myDisplay').text("this is case " + n);
break
case 3:
alert(n);
$('#myDisplay').text("this is case " + n);
break

default:
alert('A great detective always breaks the case. :)');
break

}

}

我省略了常量“k”,因为 case 语句使上一个示例中的“if”语句变得无用。上面的代码更好地说明了我遇到的问题。

任何帮助将不胜感激。 :)

最佳答案

根据更新的问题进行编辑:

问题是您在回调中调用 $.ajaxComplete() 。你应该摆脱它。匿名回调函数就是您所需要的。

$.ajaxComplete() 的目的是设置一个默认函数,以便在任何 ajax 请求完成时运行。如果这是您想要的,您应该将其从当前回调中取出,并将其放在 .ready() 调用中,以便它只运行一次。

按照您现在的方式,对于每次点击(以及成功的响应),您都会添加另一个相同的处理程序。因此,单击 5 次后,它现在有 5 个相同的单击处理程序。

来自文档: http://api.jquery.com/ajaxComplete/

Whenever an Ajax request completes, jQuery triggers the ajaxComplete event. Any and all handlers that have been registered with the .ajaxComplete() method are executed at this time.

<小时/>

原始答案

这一定不是您的实际代码,因为它根本不会按照您的方式运行。

您的函数没有 function 声明。您需要使用 0 之类的值初始化 i,并且 click 处理程序的右括号放错了位置。

也就是说,您的代码在更正后对我来说工作得很好。

尝试一下: http://jsfiddle.net/sGWjL/1/

如果警报为您弹出 5 次,则您需要粘贴更多(或实际)正在使用的代码。

var i = 0;
var k = 5;

$('document').ready(function () {
$('#someElement').click(function (e) {
e.stopImmediatePropagation();
i++;
if (i >= k) {
my_function();
}
});
});

function my_function() {
alert(i);
$('#myDisplay').text("You have clicked on '#someElement' " + i + "times");
}​

关于JQuery 和事件冒泡...再次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com