gpt4 book ai didi

javascript - jQuery 选择器是快照还是实时更新

转载 作者:行者123 更新时间:2023-11-29 15:41:14 24 4
gpt4 key购买 nike

我有一个派生自 jQuery 选择器的变量 y:

function g() {
jQuery('.MyProperty').each(function(){
var x = jQuery(this);
f(x);
});
}

function f(x) {
var y = x.siblings('SomeProperty').children('SomeClass');
var myValue = random();
y.MyValue = myValue;
jQuery.ajax(
/* ... */
success: function {
if (myValue != y.MyValue) {
/// Do something!
} else {
/// Do something else!
}
}
);
}

现在,假设 g() 是一个事件处理程序,每当用户单击按钮时它就会运行。这意味着它可以连续发射。由于 f() 触发异步 AJAX 调用,浏览器在成功之前不会阻塞,并且在完成所有 f() 调用后它们可能全部以某种随机顺序到达(请记住,它们不会阻塞 AJAX 调用并将完成),例如:

我面临的问题是,每个 AJAX 回调中的 y 似乎是实际 DOM 对象的快照,因为尽管调用 g()(和 f( ) 通过扩展)发生在回调函数运行之前。

我想知道是否有任何方法可以刷新 jQuery 选择器,以便 y 的状态可以得到正确更新。

编辑:为了澄清我的担忧,这是一个示例事件队列:

g() /// Sets y.MyValue to 1.5555
g() /// Sets y.MyValue to 634.34
g() /// Sets y.MyValue to 555555
AJAX call back // Reads y.MyValue as 1.5555 when it should be 555555
AJAX call back // Reads y.MyValue as 555555 which is correct
g() /// Sets y.MyValue to 4232
AJAX call back // Reads y.MyValue as 4232 which is correct
AJAX call back // Reads y.MyValue as 634.34 when it should be 634.34

当服务器的响应时间出现波动时,这可能会发生。

最佳答案

jQuery 对象不是 DOM 的快照。它们只是包装器,它们是包含对 DOM 元素(匹配您的选择器)的引用的对象。事实上,每次使用 jQuery 函数时,都会创建一个 jQuery 对象的新实例。所以你的 g() 函数每次都会将一个新实例传递给 f() 。然后 f 在这个新创建的 jQuery 对象实例上创建一个 MyValue 属性。然后为每个 ajax 调用创建一个新的成功处理程序。y.MyValue 和 myValue 将始终相等,因为您每次都创建所有内容的新实例并告诉这些值相等。

关于javascript - jQuery 选择器是快照还是实时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596858/

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