2016-09-16 18 views
-1

私は関数を再利用しようとしています。それをindexOf()の中に入れようとしたときに関数を破る変数を定義しています。私はいくつかの近似を試みましたが、なぜ動作していないのか分かりません。javascript variable inside indexOf

機能が破壊された場合には
function toggleSelectAll(control, nadaValue) { 
var allOptionIsSelected = (control.val() || []).indexOf('"' + nadaValue + '"') > -1; 

toggleSelectAllはこのように呼ばれている:

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

あなたが見ることができます:

toggleSelectAll($(this), 1); 

が、これは1 subsituteしようとしているコードは、このようなものです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。私は働いているexample.Updated答えとして2番目のフィドルを検討していた。 – Abhijeet