【问题标题】:How to check if object is undefined/null如何检查对象是否未定义/为空
【发布时间】:2012-04-20 13:55:51
【问题描述】:

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

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

【问题讨论】:

  • 代码提示:没有理由将;放在一个块之后(即在所有ifs之后),您可以使用a != b而不是!(a == b)。跨度>
  • 另外,选择器的开头不应该有#,把它去掉。
  • 提示:在这种情况下,写 if (!$lastForm) 会更短/更容易。
  • @minitech。但它被调用了,所以......去看看。
  • @Phrogz。你是对的,但应该注意的是,如果$lastForm 可以是0,则它被视为错误。但在这种情况下你是对的(你提到过!只是澄清了你的明智评论......)

标签: javascript jquery ajax scope


【解决方案1】:

我认为这是因为它是在内部范围内声明的。将声明移到函数外部。每个函数都会创建一个新范围,因此不会保存到下一次调用:

代码:

$(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_'] 看起来不应该存在。

【讨论】:

  • 您可能也想更改第二个var $lastForm - 否则整个事情都会中断。
  • 太棒了。极好的。非常感谢。关于#,我有几个关联的Ajax 操作。所以它不是真正的$("#[id^='r_form_']").bind("ajax:success",,而是`.bind("ajax...``。如果我把#去掉,它会给我一个语法错误。
【解决方案2】:
if(typeof e === 'undefined') {
    // your code here
}

【讨论】:

  • 你的字符串有错别字,无论如何,我很抱歉,但我不明白它是如何解决问题的? null == undefinedFiddle
  • 人们在投票之前真的应该三思而后行,如果你不知道是对是错,请不要投票......
  • (您现在应该删除这个答案。)
猜你喜欢
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 2017-08-02
  • 2019-06-09
  • 2013-02-13
相关资源
最近更新 更多