jQuery'if'语句不起作用

时间:2011-09-21 16:01:54

标签: javascript jquery

这应该是一个简单的if声明,但它对我不起作用。基本上,当您单击一个元素时,我希望突出显示该元素,并将ID放入变量value中。但是,如果在同一个元素中点击两次,我想value = NULL

(function($){ 
  $(".list").click(function() {
     $(this).toggleClass("hilite");
     var temp = $(this).attr('id');
     if (value != temp) {
        var value = $(this).attr('id');
     } else {
        value = NULL;
     }
  });
})(jQuery);

7 个答案:

答案 0 :(得分:4)

您的主要问题是,您通过使用var关键字重新定义值变量来“提升”它。使用更少的代码也可以更有效地编写此代码。这应该有效:

(function($) { 
    // somewhere outside click handler
    var value = '';
    // click handler
    $(".list").click(function() {
        var id = $(this).toggleClass('hilite').attr('id');
        value = (value === id) ? null : id;

        /* or if you prefer an actual if/else... 
        if (value === id) {
            value = null;
        else {
            value = id;
        }
        */
    });
})(jQuery); 

<小时/> 编辑:有关可能有用的原始代码段的一些常规注释:

  • NULL应为null
  • 尝试不要多次运行相同的选择器,或者多次从同一个DOM对象重新创建一个jQuery对象 - 将结果缓存到变量(例如var $this = $(this);)<更高效和可维护/ LI>
  • 您的比较可能是“安全的”,但最好使用!==而不是!=来避免无意识的类型强制。
  • 不确定您在原始示例中打算如何使用value,但始终记住变量在JavaScript中是函数范围的,因此您的var value语句正在提升value标识符对于整个函数,这意味着您的分配对单击处理程序之外的任何内容都没有影响。

答案 1 :(得分:3)

您需要在函数范围之外声明var值,以便在函数调用之间保持其值。实际上,值变量在设置后就会丢失,因为它超出了范围。

var value = null;

(function($){ 
  $(".list").click(function() {
     $(this).toggleClass("hilite");
     var temp = $(this).attr('id');
     if (value != temp) {
        value = temp;
     } else {
        value = null;
     }
  });
})(jQuery); 

答案 2 :(得分:2)

你可以这样做:

(function($){ 
  var tmp = {};
  $(".list").click(function() {
     $(this).toggleClass("hilite");
     var id = $(this).attr('id');
     if (!tmp[id]) {
        var value = id;
        tmp[id] = true;
     } else {
        value = NULL;
        tmp[id] = false;
     }
  });
})(jQuery); 

通过这种方式,您可以使用tmp对象来存储所有不同id的

的状态

答案 3 :(得分:1)

它可能不会跳过那个陈述,你可能会对隐含的全球“价值”和本地“价值”产生混淆。

(function($){ 
  $(".list").click(function() {
     $(this).toggleClass("hilite");
     var temp = $(this).attr('id');
     if (value != temp) { // <-----------------Implied global var called "value"
        var value = $(this).attr('id'); // <---Local variable valled "value"
     } else {
        value = NULL; // <---------------------Which one am I
     }
  });
})(jQuery); 

此外,它应该是value = null,因为NULL只是一个未定义的变量。

这应该是两点的一个有效例子:

var value = null;

(function($){ 
  $(".list").click(function() {
     $(this).toggleClass("hilite");
     var temp = $(this).attr('id');
     if (value != temp) {
        value = $(this).attr('id');
     } else {
        value = null;
     }
  });
})(jQuery); 

答案 4 :(得分:0)

在条件语句中使用它之前,是否需要声明value

答案 5 :(得分:0)

您没有在此功能中设置值。

var value = "NULL";
(function($){ 
  $(".list").click(function() {
     $(this).toggleClass("hilite");
     var temp = $(this).attr('id');
     if (value != temp) {
        value = $(this).attr('id');
     } else {
        value = "NULL";
     }
  });
})(jQuery); 

答案 6 :(得分:0)

未定义变量value。它要么是一个全局变量,要么你可以使用jQuery的$('.selector).data()方法将它附加到元素: http://api.jquery.com/data/

我还建议使用!==进行比较,因为它会比较变量的类型和内容。