2011-02-08 2 views
1

У меня есть сценарий jquery ниже, чтобы поменять область выбора на основе опции, она отлично работает в Firefox, но ничего не делает в IE, но IE тоже не показывает никаких ошибок, я был действительно надеясь, что кто-то может указать мне в правильном направлении. Любая помощь будет очень ценится:Проблема с .change функцией в IE

$(".initDealers").change(function() { 

    if ($('.initDealers option:selected').val() == "All") { 

     $('.allDealers').show(); 

     $('.initDealers').hide(); 

    } else { 

     $('.initDealers').show(); 

    } 
}); 
+0

'$ ('. InitDealers option: selected'). Val()' может быть записано как 'this.value' – rahul

+0

Мне любопытно, какую версию jQuery вы используете? Я бы подумал, что они это исправили. –

ответ

1

Попробуйте использовать .click вместо .change

Getting jQuery to recognise .change() in IE

Вы могли бы сделать что-то вроде этого:

$('select').bind($.browser.msie ? 'click' : 'change', function() {}); 
+0

Большое спасибо, IE не поддерживает .change? – Rachel

2

IE не признает, что select изменился, пока вы не переместите фокус в сторону от поля.

Это связано с тем, как IE использует элемент управления selectbox Windows; он эффективно работает как плагин в этом отношении. Вы также можете заметить причуды с блоками выбора в IE, когда дело доходит до слоев; у выборочных ящиков есть привычка всегда показывать сверху, даже когда у вас есть другие элементы, покрывающие их. Это также вызвано тем же.

Быстрое решение заключается в том, чтобы уловить событие click, а не событие change. Затем это произойдет, когда пользователь внесет изменения, не дожидаясь их изменения фокуса вдали от поля.

Однако даже тогда у вас будут проблемы, потому что событие click не подбирает изменения, сделанные с помощью клавиатуры, поэтому вы можете перейти в поле с помощью клавиши табуляции и изменить его, а событие click никогда не будет уволена.

По этой причине вам может потребоваться поймать как события click, так и change. Конечно, тогда вы в конечном итоге сталкиваетесь с проблемой, возможно, поймать одно и то же изменение более одного раза. Это не идеально, и вам нужно будет его кодировать, но это единственный способ поймать все возможные способы изменения пользователем поля.

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

+0

Спасибо за ответ и дальнейшие подробности. Я буду работать над – Rachel

Смежные вопросы