Ответ 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
}