2012-08-29 16 views
1
我有一個問題

,這裏是JavaScript/jQuery的.filter jQuery的錯誤

getTextForDisplay: function() { 

      var displayText = "Select..."; 
      var options = this.dataSource._data; 

      var selectedOptions = $.filter(options, function(index){ 
       return this.selected; 

      }); 

      if (selectedOptions.length == 1) { 
       displayText = "length1"; 
      } 
      else if (selectedOptions.length > 1) { 
       displayText = "Multiple..."; 
      } 
      return displayText; 
     } 
    }); 

所以這是關於有複選框,選項變量是可觀察到的陣列的多選下拉框從視圖模型中提取數據,所以我想要做的是顯示「length1」,如果只有一個複選框被選中,並顯示「多...」,如果選擇多個複選框,這看起來很直截了當,但我在運行時遇到錯誤。錯誤是c.replace不是一個函數,錯誤在jquery.min.js文件中。如果我從.filter中刪除索引,那麼它仍然不起作用,但它也不會出錯。

+0

你爲什麼認爲'.filter'接受2個參數? – zerkms

+0

1st避免使用if-elseif :) –

+0

@ eicto:任何有效的原因呢? – zerkms

回答

4

的jQuery沒有定義jQuery.filter()功能(至少不是in the public API)。它確定的.filter()jQuery集合的一種方法。

也許jQuery.grep()是你在找什麼?

var selectedOptions = $.grep(options, function (option, index) { 
    return option.selected; 
}); 
+0

這工作對我來說,但不是使用this.selected我不得不使用option.selected,所以我可以得到返回數組的元素。謝謝! –

+0

@ChrisStopher啊。抱歉。認爲它設置了功能的上下文。 –

3

除非您自己編寫或使用插件,否則沒有$.filter()這樣的事情。

正確的語法是

options.filter(function (index) { 
    ... 
}); 

這裏的文檔:http://api.jquery.com/filter/

+0

jQuery確實有'$ .filter'方法,它只是沒有記錄。打開你的控制檯並運行'typeof $ .filter' –

+0

@KevinB ok,夠公平的。但從它的來源看,這顯然不是OP想要的。 – bhamlin

+0

同意。它的意思是用選擇器字符串過濾jQuery對象。 –

0

您沒有正確使用jQuery.filter方法,但是,有記錄的方法可以滿足您的需求。您應該使用記錄的方法而不是無證方法。

$.grep(options, function(){ 
    return this.selected; 
}); 

爲此,options必須是一個類似數組的結構。