Событие изменения jQuery при выборе не вызывается другой функцией, изменяющей выбранный атрибут - PullRequest
5 голосов
/ 23 февраля 2010

HTML

<select multiple="multiple" id="myID" name="myName">
    <option value="blue">blue</option>
    <option value="red">red</option>
    <option value="green">green</option>                
</select>

JQuery:

$('select')
    .change(function(){
        alert("Change Event Triggered On:" + $(this).attr("value"));
    })

Это работает как есть. Если я щелкну элемент в мультиселекции, сработает предупреждение.

Однако, когда я «выбираю» элемент из меню выбора через jQuery, вот так:

$('#myOtherSelector')
    .click(function(){
        var $matchingOption = [goes and selects the specific OPTION to toggle]
        if ($matchingOption.attr("selected")){
            $matchingOption.removeAttr("selected")
        }else{
    $matchingOption.attr("selected","selected");
        }
    })

Этот сценарий работает так, что он изменяет атрибут SELECTED и визуально обновляет список параметров, однако событие onchange не запускается в этом сценарии.

Почему это?

1 Ответ

11 голосов
/ 23 февраля 2010

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

else {
  $matchingOption.attr('selected', 'selected').trigger('change');
}
...