2

这个问题已经出现了很多,但我不能让它工作。

我有 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 请求返回时变量被重置。但我不是真正的专家,似乎无法找到答案。

4

2 回答 2

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_']看起来它不应该在那里。

于 2012-04-20T14:00:04.090 回答
1
if(typeof e === 'undefined') {
    // your code here
}
于 2012-04-20T13:57:13.787 回答