Используя jQuery 1.7.1, я пытаюсь создать обработчик событий для события изменения в раскрывающемся списке. Раскрывающийся список динамически добавляется в DOM. Кажется, работает хорошо на большинстве браузеров, но ох, какой странный IE8 хочет быть трудным. Есть ли обходной путь? Должен ли работать? Я много читаю здесь и в других местах, и во многих случаях входные данные кажутся противоречивыми, и предлагаемые решения, которые я нашел / попробовал, не сработали для меня.
Может кто-нибудь уточнить, должно ли это работать в IE8 для .state-seletor
выпадающих меню, которые создаются на лету?
$( document ).on( 'change', '.state-selector', function( e ) {
e.preventDefault();
alert( 'ON()' );
});
Я буду продолжать ковыряться, но если кто-нибудь сможет это выяснить, прежде чем я сойду с ума, я был бы признателен.
Спасибо.
UPDATE
По запросу @ Wertisdk, приведенному ниже, вот мой выпадающий фрагмент:
<select name="data[Contractor][service_area_state]" class="state-selector">
<option value="">Select a state...</option>
<option value="AK">Alaska</option>
<option value="AL">Alabama</option>
...
<option value="WI">Wisconsin</option>
<option value="WV">West Virginia</option>
<option value="WY">Wyoming</option>
</select>
ОБНОВЛЕНИЕ 2
К вопросу @ mblase75, возможно, имеет значение метод, используемый для создания динамического выпадающего списка. По сути, я клонирую существующий узел DOM и очищаю выбранное там значение. Следует отметить, что .additionalink a
также генерируется динамически. Когда вы нажимаете .addtionallink a
, клонируемый шаблон содержит новый узел .addtionallink a
:
$( document ).on( 'click', '.additionallink a', function( e ) {
e.preventDefault();
var copy = $( this ).closest( '.template' ).clone();
// Massage the template copy's content and insert it
// - Clear the value selected in the original dropdown
// - Clear the list of counties loaded based on the original dropdown selection
$( '.state-selector', copy ).val( $( '.state-selector option:first', copy ).val() );
$( '.counties', copy ).empty();
$( this ).closest( '.template' ).after( copy );
});
ОБНОВЛЕНИЕ 3
Вот похожий JSFiddle . Это почти мой код, но есть одно ключевое отличие, которое может быть всем. Эта скрипка использует .append()
для вставки нового контента на основе выбора состояния. Мой код использует метод .load()
. В остальном все одинаково.