Функция jQuery возвращает пустую строку, когда выбранное значение выпадающего меню равно 0

У меня есть выпадающий список, когда <option value="0"> выбран, он должен вернуть все элементы вместо пустой строки (это то, что я вижу при выполнении console.log(), если есть какое-то значение, такое как 1,2,3,etc... возвращает соответствующие результаты.

Мне нужно получить значение 0 , когда он выбран, но вместо этого он возвращает an empty string в то время как другие номера извлекаются, как они должны.

вот моя функция:

function _getCatsByCom(){
    var com_id_selected = $('select[name=com_id]').val();

    // Next line below with conditional statement is not working, don't know why.
    if(com_id_selected != undefined)
        console.info(com_id_selected);
}

Вот выпадающий HTML:

<select onchange="template.getCatsByCom();" class="span12" name="com_id">
    <option selected="selected" value="">-- Choose a component --</option>
    <option value="1">Content</option>
    <option value="2">E-commerce</option>
</select>

Кто-то знает, что я здесь не так делаю?

В PHP всякий раз, когда функция возвращает значение 0, она возвращает FALSE,
Строгий против Свободной статьи

== ОБНОВЛЕНО ==

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

2 ответа

Решение

Используя ваш текущий HTML:

<select onchange="template.getCatsByCom();" class="span12" name="com_id">
    <option selected="selected" value="">-- Choose a component --</option>
    <option value="1">Content</option>
    <option value="2">E-commerce</option>
</select>

Следующий JS вернет все значения, если значение по умолчанию (которое "" не "0") выбран;

function _getCatsByCom(){
    var select = $('select[name=com_id]');
    var val = select.val();

    if (val == "") {
        val = select.find('option').map(function () {
            return this.value || undefined; // map will automatically remove the "" from the returned array.
        }).get();
    }

    // Now val will either equal "1", or "2", or "3" etc OR the array of all values.
    console.log(val);
}

Посмотрите, как это работает здесь; http://jsfiddle.net/y5vPE/. Хотя я нахожу плохой дизайн, теперь у вас есть переменная, которая иногда является строкой, а иногда массивом.

... если вы хотите "исправить" его на "0", либо измените value="" в value="0" или измените свою функцию;

function _getCatsByCom(){
    var select = $('select[name=com_id]');
    var val = select.val();

    if (val == "") {
        val = "0";
    }

    // Now val will either equal "0", "1", "2"... 
    console.log(val);
}

Изменить

<option selected="selected" value="">-- Choose a component --</option> 

в

<option selected="selected" value="0">-- Choose a component --</option>
Другие вопросы по тегам