событие изменения jQuery на <выборе>, не стреляющем в IE

Следующие две строки функционально эквивалентны:

int foo (int a);
int foo (const int a);

, Очевидно, Вы не будете в состоянии изменить a в теле foo, если оно определило второй путь, но нет никакого различия от внешней стороны.

то, Где const действительно пригождается, с параметрами указателя или ссылкой:

int foo (const BigStruct &a);
int foo (const BigStruct *a);

то, Что это говорит, - то, что нечто может взять большой параметр, возможно, структура данных, это - гигабайты в размере, не копируя его. Кроме того, это говорит вызывающей стороне, "Нечто не будет* изменять содержание того параметра". Передача ссылки константы также позволяет компилятору принимать определенные решения производительности.

*: Если это не выбрасывает мыс константы, но это - другое сообщение.

55
задан Michael Myers 3 November 2009 в 10:51
поделиться

5 ответов

Событие change не всплывает в IE (см. здесь и здесь ). Вы не можете использовать делегирование событий вместе с ним.

Фактически, именно из-за этой ошибки IE jQuery live должен был официально исключить изменение из списка поддерживаемые события (к вашему сведению, спецификация DOM утверждает изменение должно всплыть ) . [ 1 ]

Что касается вашего вопроса, вы может напрямую связываться с каждым выбором:

$('#container select').change(/*...*/)

Если вы действительно хотите делегировать событие, вы можете добиться успеха, попробовав то, что этот человек сделал , и привязать к щелкните в IE только, что делает пузыри:

$('#container').bind($.browser.msie ? 'click' : 'change', function(event) {
    /* test event.type and event.target 
     * to capture only select control changes
     */
})

Но это обнаружение браузера кажется действительно неправильным. Я' Я действительно попробую поработать с первым примером (привязка непосредственно к раскрывающимся спискам). Если у вас нет сотен ящиков