web-dev-qa-db-ja.com

JQueryでIndexOfを使用する方法

if($('#this').val().indexOf('4289')){
    Do something
else
    Do something. 

これは、その4289でのみ機能します。
「or」を使用してインデックスを作成する他の番号を追加しようとすると、機能しません。他の番号をどのように入れるべきですか。例えば

IndexOf('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;
        }
    })
13

これは、文字列_'4289||78843'_を探しているためです。これは、想定しているターゲットには存在しません。論理演算子は、どこにでも放り込むことはできず、論理的に操作する実際の値がある場合のみです。このようなもの:

_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
}
_
23
David