Следующие две строки функционально эквивалентны:
int foo (int a);
int foo (const int a);
, Очевидно, Вы не будете в состоянии изменить a
в теле foo
, если оно определило второй путь, но нет никакого различия от внешней стороны.
то, Где const
действительно пригождается, с параметрами указателя или ссылкой:
int foo (const BigStruct &a);
int foo (const BigStruct *a);
то, Что это говорит, - то, что нечто может взять большой параметр, возможно, структура данных, это - гигабайты в размере, не копируя его. Кроме того, это говорит вызывающей стороне, "Нечто не будет* изменять содержание того параметра". Передача ссылки константы также позволяет компилятору принимать определенные решения производительности.
*: Если это не выбрасывает мыс константы, но это - другое сообщение.
Событие change
не всплывает в IE (см. здесь и здесь ). Вы не можете использовать делегирование событий вместе с ним.
Фактически, именно из-за этой ошибки IE jQuery . [ 1 ] live
должен был официально исключить изменение
из списка поддерживаемые события (к вашему сведению, спецификация DOM утверждает изменение
должно всплыть )
Что касается вашего вопроса, вы может напрямую связываться с каждым выбором:
$('#container select').change(/*...*/)
Если вы действительно хотите делегировать событие, вы можете добиться успеха, попробовав то, что этот человек сделал , и привязать к щелкните
в IE только, что делает пузыри:
$('#container').bind($.browser.msie ? 'click' : 'change', function(event) {
/* test event.type and event.target
* to capture only select control changes
*/
})
Но это обнаружение браузера кажется действительно неправильным. Я' Я действительно попробую поработать с первым примером (привязка непосредственно к раскрывающимся спискам). Если у вас нет сотен ящиков
, делегирование событий в любом случае не принесет вам многого.
[ 1 ] Примечание. JQuery> = 1.4 теперь имитирует всплывающее событие изменение
в IE через live ()
/ на ()
.
Идея, которая может помочь:
$(document).ready(function() {
$('#container select[name="mySelectName"]').change(function(e) {
var s = $(e.target);
if (s.val()=='1') //hide/show something;
});
});
Если вы используете AJAX, попробуйте функцию live () :
$(document).ready(function() {
$('#container select[name="mySelectName"]').live('change', function(e) {
var s = $(e.target);
if (s.val()=='1') //hide/show something;
});
});
Я пытаюсь понять, почему вам нужно дважды проверять имя выбора после получения для него события.
У вас случайно есть несколько элементов с одинаковым идентификатором?
Вы действительно хотели сказать «#container select» вместо «#container»?
Если Я правильно помню, что вам нужно будет вызвать blur (), чтобы jQuery вызывал change () на машинах IE. Попробуйте что-нибудь вроде:
$("select[name=mySelectName]").click(function() {
$(this).blur();
});
Добавьте эти строки в заголовок страницы, Устройтесь поудобнее и расслабьтесь! :)
$(document).ready(function(){$('select').bind('onChange',function(){$(this).blur()});});