Выпадающий HTML-код не может захватить onChange (), если в раскрывающемся списке только одно значение - PullRequest
3 голосов
/ 08 февраля 2012

Я использую Jquery, для выбора значения раскрывающегося списка.Мне нужно сделать какое-то действие с событием OnChange (.change в jquery), но если в раскрывающемся списке есть только одна опция, я не могу зафиксировать ее в событии onChange.Мой раскрывающийся список формируется динамически, поэтому не знаю, сколько опций я получу, сколько опций, но я столкнулся с проблемой, если есть только одна опция.
Есть ли способ перехватить событие OnChange для только содин?

Ответы [ 6 ]

1 голос
/ 09 февраля 2012

Вам не нужно проводить событие onchange.Просто имейте функцию, которая вызывается из onchange, и если есть только один элемент, просто вызовите эту функцию.

function populate() {
    //do work to populate #selector

    if($("#selector option").length == 1) {
        $("#selector").hide();
        workerFunction();
    } else {
        $("#selector").show();
    }

    $("#selector").change(workerFunction);

    //the following line of code will work like a default:
    workerFunction();
}

function workerFunction() {
    //put whatever used to be in your onChange function here
}
0 голосов
/ 17 декабря 2018

Похоже, у вас есть ошибка HTML в ваших тегах параметров.

В дополнение к этому, чтобы нацелить что-то динамически созданное с помощью jQuery, вы должны использовать делегаторы.

$('selector').change( function(e){...}); // without delegator
$('body').on('change','selector', function(e){...}); // with delegator, it detects even an element added dinamically

Тем не менее, вы должны быть в состоянии обнаружить изменения для новых и старых элементов

0 голосов
/ 08 февраля 2012

Как насчет условного связывателя событий?Что-то вроде:

var changeHandler = function (method) {
    alert(method);
};
if ($('select option').length > 1) {
    $('select').change(function() {
        changeHandler('change');
    });
} else {
    $('select').click(function() {
        changeHandler('click');
    });
}
0 голосов
/ 08 февраля 2012

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

0 голосов
/ 08 февраля 2012
<label for="checkboxThatUsedToBeASelect">
    <input type="checkbox" id="checkboxThatUsedToBeASelect" name="checkboxThatUsedToBeASelect"  value="something" />
</label>

$('#checkboxThatUsedToBeASelect').change( function(){

});

Теперь у вас есть более удобный ввод, и он будет запускать изменения, когда он отмечен или не отмечен. : D

0 голосов
/ 08 февраля 2012

Событие onchange наступает при изменении внутреннего состояния элемента.Поскольку у вас есть выпадающий список с уникальным значением, его состояние никогда не изменяется, поэтому событие не вызывается.

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