谢谢您的帮助!你们是一群绅士!
这是我在递归函数中的解决方案:
function check_for_update($element) {
// check for the check_for_update_id attribute
if ($element.attr('check_for_update_id') === undefined) {
// set the attribute if it's currently undefined
d = new Date();
check_for_update_id = String(d.getTime()) + String(d.getMilliseconds());
$element.attr('check_for_update_id', check_for_update_id);
}
// create $element_new using the check_for_update_id attribute
$element_new = $( '[check_for_update_id=' +
$element.attr('check_for_update_id') +
']');
// if $element has been removed from the DOM,
// $element_new will not have a 'check_for_update_id' attribute
if ($element_new.attr('check_for_update_id') !== undefined) {
$.ajax({ ... });
setTimeout(function() {
check_for_update($element_new);
}, 1000);
}
}
第一次将元素传递给函数时,属性“check_for_update_id”将在 $element 中未定义。如果当前未定义,则设置了“check_for_update_id”,并且所有后续 setTimeout() 调用 check_for_update() 函数,$element 现在将与此“check_for_update_id”值相关联。为避免冲突,我在调用此函数时将“check_for_update_id”设置为秒 + 毫秒(这对我来说有点矫枉过正,但总比抱歉更安全)。
然后使用 'check_for_update_id' 属性作为选择器在函数内创建 $element_new:
$element_new = $( '[check_for_update_id=' +
$element.attr('check_for_update_id' +
']');
如果在 setTimeout() 迭代之间删除了 $element,则 $element_new 将未定义“check_for_update_id”属性,并且不会再次调用 setTimeout()。