Ввод .val () проверка нескольких строк

0

Можно ли проверить несколько строк, используя следующее?

 if($("#clueOneInput").find('input[type=text]').val()=='dr1'||'dr')

Мой оригинал

if($("#clueOneInput").find('input[type=text]').val()=='dr1')

работает точно так, как ожидалось (желательно). Если ключ верен в соответствии с заданной строкой, продолжайте.

Проблема заключается в том, что я хочу включить изменения в случае опечатки. Это разрешено? Я парень PHP, поэтому я даже не уверен, что мое использование || верно. У кого-нибудь есть понимание?

Теги:
string
input

5 ответов

2
Лучший ответ

Вы можете делать то, что вы хотите, но или оператор (||) не работает так. Я бы сохранил значение в переменной, а затем проверил несколько опций. просто набрав, например,

var x = $("#clueOneInput").find('input[type=text]').val();
if(x == 'dr1' || x == 'dr')
{
    //do something
}

РЕДАКТИРОВАТЬ

То, что здесь происходит, является следствием приоритета оператора и типа принуждения. Параметр .val() проверяется сначала на 'dr1'. == имеет более высокий приоритет, чем OR || поэтому сравнение выполняется ==, перед OR || , Теперь это приведет к логическому, истинному или ложному, тогда OR || будет работать, так что вы закончите кратко или false || 'dr' false || 'dr' или true || 'dr' true || 'dr' внутри оператора if, которые оба разрешают true, как показано ниже

Расширение объяснения ||

|| является логическим оператором OR, это один из условных операторов (вместе с && и!) в javascript. При использовании с булевыми выражениями (например, x == 'dr1' т.е. разрешается прямо к true или false) || может быть буквально прочитан как OR, поэтому в моем коде выше он будет читать "если x равно" dp1 "или x равно" dr ". При использовании с выражениями, которые не являются непосредственно булевыми значениями, они будут принуждаться к правдивости или ложности. Если я временно игнорирую инструкцию if из вашего исходного кода (только для этого примера) и беру только логическое выражение OR ('dr1'||'dr'), которое не имеет логических выражений, но напрямую использует строки, оно фактически разрешает к первому значению ('dr1'). Зачем? При использовании между двумя строками. || возвращает первое значение, которое разрешает true (хорошо правдиво). В js любая строка, отличная от пустой строки, верна. Некоторые примеры

var test1 = "Foo" || "Bar";         // test1 is "Foo"
var test2 = "" || "Bar";            // test2 is "Bar"
var test3 = "" || "" || "Bar";      // test3 is "Bar"
var test4 = "" || "Foo" || "Bar";   // test4 is "Foo"
var test5 = false || "Foo" || "Bar";// test5 is "Foo"

Таким образом, результат выражения 'dr1'||'dr' всегда будет возвращать 'dr1'.

ПРИМЕЧАНИЕ. Оператор присваивания = имеет более низкий приоритет, чем оператор OR || поэтому OR || выполняется сначала, а затем присваивание =. Это отличается от оператора сравнения == который выполняется сначала перед OR ||

Значения, о которых вы должны опасаться, являются ложными (т.е. Разрешение на ложь), равны null, 0, NaN, пустая строка ("") или неопределенные. Все остальное является правдивым, которое включает (но не ограничиваясь) положительные и отрицательные числа (поэтому -1 разрешает true) и любую строку (включая "false")

Теперь в вашем конкретном случае оператор if всегда проверяет логическое выражение, если выражение не является логическим, оно будет принудительно введено в логическое, поэтому ваши два результата были false || 'dr' false || 'dr' или true || 'dr' true || 'dr' который решил "dr" и true соответственно. Теперь "dr" не является пустой строкой, поэтому разрешает true с помощью оператора if, и, конечно, true является истинным, поэтому почему ваш оператор if всегда разрешен для true.

Логический оператор И && ведет себя аналогичным образом, но я оставляю это на другой день.

Дополнительная заметка я нахожу ее (||) весьма удобной при определении функций, которые имеют параметры по умолчанию, например

function awesomeFunction(inputParam)
{
    inputParam = inputParam|| "Default Value"
    //more code .. using inputVar
}

То, что это делает, - это если функция вызвана, предоставляя входной параметр, например

awesomeFunction("Input Value");

то значение inputParam внутри функции будет "Input Value". Если он не вызывается с любыми входными параметрами, например

awesomeFunction();

то значение inputParam внутри функции будет "Default Value". Причина в том, что inputParam внутри функции для второго вызова будет undefined. Это, как мы знаем, разрешает ложь (ложь), поэтому выражение inputParam || "Default Value" inputParam || "Default Value" решит "Default Value"

во всяком случае, я думаю, что я, возможно, увлекся, но я надеюсь, что это поможет

Ссылка FYI

Разработчик и разработчики Mozilla Javascript

В частности, разделы приоритетов логических операторов и операторов

  • 0
    OJay, ты потрясающий. Я смог понять это. Это гораздо более чистое решение. Можете ли вы немного расширить использование || оператор в этом случае. Что это было чтение?
  • 0
    Это всегда будет оценивать что-то "правдивое". По сути, вы спрашиваете if (something || 'dr') . Поскольку «dr» является «правдивым», первый блок if всегда запускается.
Показать ещё 2 комментария
0

Вы должны повторить оператор сравнения по каждому параметру || , Это проще всего сделать, установив переменную:

var theVal = $("#clueOneInput").find('input[type=text]').val();
if (theVal == 'dr1' || theVal == 'dr') 
0

Что здесь происходит, так это то, что ваше решение всегда оценивает истину. Вы видите, что с этим фрагментом кода, поскольку вы не используете оператор сравнения по обоим значениям, вы в основном говорите false или true, и в этом случае всегда будет true, если левая сторона равна false, поскольку || == 'dr' || == 'dr' всегда верно.

if($("#clueOneInput").find('input[type=text]').val()=='dr1'||'dr')

if(false || true)
if(true || true);

Оба они всегда будут правдой.

Вам нужно сделать это:

if($("#clueOneInput").find('input[type=text]').val()=='dr1' || $("#clueOneInput").find('input[type=text]').val() == 'dr')
0

Лучший способ - сохранить ваш элемент в переменной, если вы будете использовать его более одного раза. Это легче читать, и вы получите некоторую производительность. Ommiting.val() - это умная вещь, поэтому вы можете использовать элемент для большего количества процедур! jQuery.find() - дорогостоящая функция, поэтому рекомендуется абстрагировать результат для максимального повторного использования. Добавление.val() делает вашу переменную менее многоразовой.

var el = $("#clueOneInput").find('input[type=text]');

if(el.val() == 'dr1'|| el.val() == 'dr')
0

Попробуйте использовать несколько селекторов атрибутов и объедините их с запятой, которая найдет dr1 или dr:

if($("#clueOneInput")
.find('input[type="text"][value="dr1"],input[type="text"][value="dr"])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню