2012-07-10 124 views
0

我有一个过滤器,并使用这个脚本的过滤器。jQuery if if else else filter

filteredData = filteredData.filter(function() { 
    var elm = $(this), 
    price = parseInt('0' + elm.attr('data-price'), 10) || 0; 
    if ($(price < 15)) { 
    return !(250 <= price); 
    } else { 
    return !(sliderData <= price); 
    } 
}); 

但是有什么不对。价格值是15或更多。但是代码永远不会进入else结构。

+1

你'if'实际上是评估一个jQuery对象( '$(...)') - if检查中的任何非空/非falsey值将导致检查通过,if中的代码将被评估 – nbrooks 2012-07-10 05:56:35

回答

2

尝试取出来自该行的$()函数调用:

if ($(price < 15)) { 

它应该是:

if (price < 15) { 

$()函数返回一个对象,所有的对象都是“truthy”因此,这段代码会始终进入if块,而不是else块。

(顺便说一下,假设你解决上述问题,if分支内要返回!(250 <= price)永远是true因为price< 15表达,所以你还不如干脆说return true;在这一点上。)

+0

谢谢,您能举一个修复的例子上述问题。现在我把它设置为if(价格<15){但是现在他激发了这两个陈述。低于en的else语句。但价格价值是15. – 2012-07-10 06:05:17

+0

我不明白你在这个评论中问什么。如果价格值恰好为15,那么将会转到'else'分支,因为15不小于15。 – nnnnnn 2012-07-10 06:14:53

0

我觉得你的if声明有些不合适。

filteredData = filteredData.filter(function() { 
      var elm = $(this), 
      price = parseInt('0' + elm.attr('data-price'), 10) || 0; 
      if (price < 15) { 
       return !(250 <= price); 
      } else { 
       return !(sliderData <= price); 
      } 
     }); 

这会有所帮助。

1

看来你已经把 '$' 选择意外:

尽量只: 如果(价格< 15){ (...)