2016-09-16 150 views
-1

我想重用一個函數,並且當我試圖把它放入indexOf()的內部時,我正在定義一個打破函數的變量。我嘗試了幾個近似值,但我無法弄清楚它爲什麼不起作用。該代碼是這樣的:indexOf裏面的javascript變量

function toggleSelectAll(control, nadaValue) { 
var allOptionIsSelected = (control.val() || []).indexOf('"' + nadaValue + '"') > -1; 

在功能上是打破的情況下,toggleSelectAll被稱爲像這樣:

toggleSelectAll($(this), 1); 

試圖替補多此一:

function toggleSelectAll(control) { 
var allOptionIsSelected = (control.val() || []).indexOf("1") > -1; 

你可以看到幾個JSFiddle的例子來說明更好:

這個作品:http://jsfiddle.net/victorRGS/o8cjtoqp/1/

這並不:http://jsfiddle.net/victorRGS/o8cjtoqp/2/

如果您可以在此拋出一些輕那就太好了!提前致謝!

+3

試試'.indexOf(nadaValue)'? – tcooc

+1

首先,刪除變量名稱周圍的引號。目前'indexOf'試圖找到文字'「1」'。然後你需要傳遞一個字符串,或者找到'nadaValue.toString()',因爲'indexOf'使用嚴格的比較。 – Teemu

+0

好吧,我找到了解決方案,是@Teemu說的,我必須轉換'nadaValue.toString()',它的工作就像一個魅力。感謝您的回答。我是否應該在此留言或發表適當的答覆評論? –

回答

0

indexOf使用嚴格的比較時,可以從數組中找到參數。

您擁有的數據是字符串類型。但是,您傳遞的號碼爲nadaValue,因此indexOf始終無法從數組中找到匹配項。

要解決此問題,您必須傳遞一個字符串作爲nadaValue,或在indexOf中使用之前將其明確轉換爲字符串。一種方便的方法是創建一個臨時字符串:

(... indexOf(nadaValue.toString()) ...)

這樣你可以保留號碼類型,如果在後面的代碼需要它。

+0

這就是我需要的答案! –

0

您的代碼存在問題。 indexOf()函數使用嚴格比較,即與將比較數據和數據類型的'==='進行比較。因此,在比較nadaValue時,它(indexOf())正在檢查字面1而不是字符串1,即「1」。

+0

解釋是正確的,但修復不是。雖然'indexOf(「1」)'工作,你的答案不應該工作? – Teemu

+0

謝謝@Teemu。我正在考慮第二把小提琴作爲工作的例子。更新了答案。 – Abhijeet