Как использовать IndexOf в JQuery

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

Это работает только с этим 4289,
Когда я пытаюсь добавить другие числа для индексации рядом с ним с помощью "или", это не сработает. Как мне поместить другой номер. Например,

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;
        }
    })

Ответ 1

Это потому, что он будет искать строку '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
}