Делегирование событий jQuery для выбора / параметров в Chrome - PullRequest
0 голосов
/ 06 августа 2010

Я пытаюсь привязать простое событие щелчка к выбранной опции раскрывающегося списка.

$('select#myselect').delegate(':selected', 'click', function()  
{  
    alert('selected');  
});

Этот код работает в Firefox, но не в Chrome / Safari. Могу ли я использовать .delegate (), чтобы связать опцию с таким выпадающим меню? Если так, то как? Если нет, то каково лучшее альтернативное решение?

btw, jQuery Нажмите на событие. дает потенциальное решение с использованием .change (), но я бы хотел управлять всеми привязками с помощью .delegate (), если это возможно.

1 Ответ

5 голосов
/ 06 августа 2010

Событие click не запускается для элементов <option> в этих браузерах, но независимо от того, изменяются ваши параметры или нет, с этим ничего не меняется:

$('#myselect').change(function() {  
  alert('selected, my new value is: ' + $(this).val());  
});

Это сводится к тому, что здесь нет необходимости .delegate(). .delegate() используется для прослушивания событий, которые всплывают от дочерних элементов, которые могут измениться или быть очень многочисленными, когда сам элемент никуда не денется (например, заменить через AJAX). .live() работает очень похожим образом, он просто слушает все время до document.

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

...