Как сделать так, чтобы событие select .change не срабатывало, пока оно не потеряет фокус (предпочтительно с использованием jquery)?

У меня есть поле выбора, использующее подключаемый модуль jquery dropdownchecklist. Я хочу, чтобы событие изменения срабатывало только после того, как поле выбора теряет фокус.

Событие jquery .change срабатывает для полей выбора сразу после выбора элемента в списке. В моем случае, поскольку можно выбрать несколько элементов, я хочу, чтобы изменение срабатывало только после потери фокуса, предполагая, что новые элементы были даже выбраны.

Я думал, что могу сделать какую-то цепочку, например $('#MySelect').change().blur(...) или какое-то вложение или что-то в этом роде, но я не мог заставить его работать так, как я ожидать.

Любые идеи?


person Carter    schedule 12.02.2010    source источник


Ответы (3)


Возможно, вы хотите просто предоставить обработчик события размытия и полностью игнорировать событие изменения. Затем вам придется отслеживать изменения самостоятельно. Одно из предложений состоит в том, чтобы событие изменения просто обновляло переменную, которая сообщает вам, что произошли изменения, без каких-либо дополнительных действий. Тогда событие размытия может сделать это:

 $('#yourselect').blur(function(){
     if(changesOccurred){
        //do something about it
        changeOccurred = false;
     }

 });


 $('#yourselect').change(function(){
     changeOccurred = true;
});
person Vincent Ramdhanie    schedule 12.02.2010

Вы должны быть в состоянии сделать это.

$('select').focus(function() {
    $(this).data( 'startValue', $(this).val() );
}

$('select').change(function(event) {
    event.preventDefault();
});

$('select').blur(function() {
    if ( $(this).data('startValue') == $(this).val() ) {
        //nothing has changed
    } else {
        //something's different
    }
}
person Community    schedule 12.02.2010

Ну, событие change запускается при изменении выпадающего списка. Вы не можете изменить это (какое забавное предложение в этом контексте).
Вы должны настроить свой код так, чтобы все ваши функции, которые обычно должны выполняться на change, выполнялись на событии blur.

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

person Felix Kling    schedule 12.02.2010
comment
Да, я знаю, я не хочу, чтобы все это было размыто. Я не хочу, чтобы частичные обратные передачи происходили каждый раз, когда раскрывающийся список размывается, и я хочу, чтобы определенный код запускался только при внесении фактических изменений. Не зная, размыты ли они и изменены ли они, я не могу сказать, когда запускать код. - person Carter; 12.02.2010