2013-07-21 23 views
11
if($('#this').val().indexOf('4289')){ 
    Do something 
else 
    Do something. 

これは、その4289でのみ動作し、
でIndexOfメソッドを使用する方法、それは動作しません。私は他の番号をどのように置くべきですか?例:この番号を確認して、入力フィールドの数字がこれに該当しない場合はエラーをエコーし​​ます。私はそれを使用して「または」の次にインデックスを作成するために他の番号を追加しようとするとjQueryの

ここでは、フィールドを再訪したときに死にます。それは私が仮定しているターゲットに存在しない文字列'4289||78843'、探していることになるためだ

$('#Zip').blur(function(){ 
     if (($(this).val().indexOf('0860') > -1)||($(this).val().indexOf('0850') > -1)){ 
     $('#Status_Zip').html("No way.") 
     $(this).alterClass('*_*', 'Success') 
     return false; 
     }else{$('#Status_Code').hide() 
     $(this).alterClass('*_*', 'Error') 
     $(this).css('border-color', '#F00').css('background-color', '#FFC').effect("pulsate",{times:4},2) 
      return true; 
     } 
    }) 

答えて

18

。論理演算子は、論理的に操作する実際の値がある場合に限り、どこにでも投げることはできません。このような何か:

if(($('#this').val().indexOf('4289') > -1) || 
    ($('#this').val().indexOf('78843') > -1)) 

indexOf()関数の戻り値が目標値にその値の数値指標である、または-1が見つからない場合は。だから、あなたが探しているそれぞれの価値については、インデックスが> -1(文字列内にあることを意味する)かどうかをチェックしたいと思うでしょう。その全体の状態と別の条件で||を取ると、それは論理的な操作です。

編集:あなたのコメントについて、あなたが何かにこの抽象に少しクリーナーをしたいとあなたがそれらのいずれかがである場合、文字列のコレクションを反復処理とはtrueを返す独自の機能にそれを取り出すかもしれないより一般的な場合ターゲット文字列たぶん、このような何か:

function isAnyValueIn(target, values) { 
    for (var i = 0; i < values.length; i++) { 
     if (target.indexOf(values[i]) > -1) { 
      return true; 
     } 
    } 
    return false; 
} 

も、アレイ上.forEach()でそれを行うには、よりエレガントな方法があるかもしれませんが、これは、少なくとも考えを示しています。コードの他の部分では、値の配列を作成して関数を呼び出します。

var values = ['4289', '78843']; 
var target = $('#this').val(); 
if (isAnyValueIn(target, values)) { 
    // At least one value is in the target string 
} 
+0

いいですね。それは働いている。唯一のことは、もし私がこの数字のうち20以上を置くなら、コードはこれらのインデックスの多くで長くなるだろうということです。どこかで何かを短縮することはできません。 ? –

+0

@BlessingThinker:確かに、それはそれ自身の汎用目的関数に抽象化することができます。コード内に多くのコピー/ペーストが行われるときは、少なくとも関数を抽出できる可能性が高いです。おそらくこれ以外にももっとアプローチがありますが、それは十分に簡単です。答えを例で更新しました。 – David

+0

私はぼかしを使いました。その後、正しいものが正しいと判断しますが、戻ってその番号を何かに変更すると、その関数は死んでしまったようです。 –

関連する問題