这个问题已经出现了很多,但我无法使其发挥作用。
我有5个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请求返回时,变量被重置。但我不是真正的专家,似乎无法找到答案。
答案 0 :(得分:5)
我认为这是因为它在内部范围内声明。将声明移到函数外部。每个函数都会创建一个新的范围,因此它不会保存到下一个调用:
<强>代码:强>
$(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_']
看起来不应该在那里。
答案 1 :(得分:1)
if(typeof e === 'undefined') {
// your code here
}