javascript - 如何检查对象是否未定义/空

标签 javascript jquery ajax scope

这个问题已经出现了很多,但我无法解决。

我有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/

相关文章:

javascript - 分析已插入标签管理器,但 ga() 不起作用

javascript - c3.js 条形图、样条图

jquery - 根据 div 中的位置删除一项 (jQuery)

javascript - Ajax/jQuery 实时搜索正在复制输出结果

javascript - 带有 ajax 请求的空响应正文

javascript - 如何在 div 加载内容时发出警报

javascript - jQuery if..else 基于hash id 提取的条件语句

javascript - 提交隐藏表单字段

JavaScript 美国货币格式

javascript - jQuery .load() 回调函数多次触发