这个问题已经出现了很多,但我无法解决。
我有5个div,我想隐藏最后一个使用的div之前的div。因此,如果用户单击 div 1 中的某处,然后单击 div 2 中的某处,div 1 会淡出(所有这些都在 Ajax 调用之后)
这是我的代码:
$(document).ready(function() {
$("#[id^='r_form_']").bind("ajax:success", function(evt, data, status, xhr) {
var $form = $(this);
$(this).parent().css("background", "green");
if($lastForm == null) {
var $lastForm = $(this);
};
if(!($lastForm[0] == $form[0])) {
$lastForm.parent().fadeOut(1500);
var $lastForm = $(this);
};
});
});
如果变量 $lastForm
未定义,则分配发生 Ajax 的当前表单。
变量总是未定义的。我在循环中添加了一个 alert('undefined')
,我总能得到它。为什么?
我有一种感觉,这可能是因为当 Ajax 请求返回时变量被重置了。但我不是真正的专家,似乎无法找到答案。
最佳答案
我认为这是因为它是在内部范围内声明的。将声明移到函数外部。每个函数都会创建一个新范围,因此不会保存到下一次调用:
代码:
$(document).ready(function() {
var $lastForm; //<===================
$("#[id^='r_form_']").bind("ajax:success", function(evt, data, status, xhr) {
var $form = $(this);
$(this).parent().css("background", "green");
if ($lastForm == null) {
$lastForm = $(this);
};
if (!($lastForm[0] == $form[0])) {
$lastForm.parent().fadeOut(1500);
$lastForm = $(this);
};
});
});
正如@minitech 评论的那样,选择器中的 #
:#[id^='r_form_']
看起来不应该存在。
关于javascript - 如何检查对象是否未定义/空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247700/