Jquery: несколько сравнений внутри if, любой способ написать его короче? - PullRequest
1 голос
/ 30 сентября 2010

есть эта строка:

 if($('#address_nations_id').val() != 105 && $('#address_nations_id').val() != 74)

Есть ли способ сделать его короче?

Я пробовал это:

if($('#address_nations_id').val() != 105 && != 74)

Но это не работает.

Есть идеи?

Привет

Хавьер

Ответы [ 4 ]

4 голосов
/ 30 сентября 2010

Поскольку я предполагаю (на основе идентификатора), что вы хотите проверить много больше, вы можете использовать $.inArray(), чтобы легко расширить этот список, например:

if($.inArray($('#address_nations_id').val(), ["105", "74"]) > -1)

Вы можете попробовать его здесь , имейте в виду, что вам понадобятся строки для этого метода, поскольку слабая типизация JavaScript с == здесь не работает, а .val() возвращает строку.

3 голосов
/ 30 сентября 2010

Одна вещь, которую вы можете сделать, это получить значение заранее:

var val = $('#address_nations_id').val();
if(val != 105 && val != 74)

Что лучше, так как вы делаете только один вызов метода вместо двух.

Если у вас многозначений, я бы создал таблицу поиска следующим образом:

var values = {
    "105": 1,
    "74": 1
}

и выполните

if(!($('#address_nations_id').val() in values)) {
    //...
}

Это должно быть быстрее, чем поиск значения в массиве. (не уверен насчет этого).

0 голосов
/ 30 сентября 2010

Я бы пошел с предложением Феликса . Но только для полноты:

В браузерах с indexOf для массивов вы можете сделать:

if ([105, 74].indexOf(parseInt($('#address_nations_id').val())) >= 0)

... но я бы не рекомендовал его только для двух значений. Это менее понятно, излишне сложно, и не во всех браузерах есть (пока). Большинство из этих критических замечаний относится также к использованию функции inArray в jQuery.

Там также switch:

switch (parseInt($('#address_nations_id').val())) {
    case 105:
    case 74:
        break;
    default:
        /* do your thing here *?
        break;
}

... но это вряд ли можно назвать короче, почти наверняка не подойдет только для двух значений.

0 голосов
/ 30 сентября 2010
var val = $('#address_nations_id').val();

if(val != '105' && val != '74') { 
  //do stuff
}

Редактировать :

$('#address_nations_id').val() возвращает строку, а не число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...