如何检查对象是否未定义/ null

wac*_*nia 2 javascript ajax jquery scope

这个问题已经出现了很多,但我不能让它发挥作用.

我有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);
        };
    });
});
Run Code Online (Sandbox Code Playgroud)

如果变量$lastForm未定义,则分配Ajax发生的当前表单.

变量始终未定义.我alert('undefined')在循环中添加了一个,我总是得到它.为什么?

我有一种感觉,可能是因为当Ajax请求返回时,变量被重置.但我不是真正的专家,似乎无法找到答案.

gdo*_*ica 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);
        };
    });
});?
Run Code Online (Sandbox Code Playgroud)

正如@minitech #在选择器中所评论的那样:#[id^='r_form_']看起来它不应该存在.

  • 您可能也想要更改第二个`var $ lastForm` - 否则整个事情就会中断. (2认同)