jQuery on () изменить в IE8 - PullRequest
       25

jQuery on () изменить в IE8

7 голосов
/ 17 февраля 2012

Используя 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(). В остальном все одинаково.

1 Ответ

1 голос
/ 17 февраля 2012

Я думаю, что волшебное слово здесь .clone(), вы можете столкнуться с этой ошибкой, которая уже была исправлена ​​в бета-версии 1.7.2: http://bugs.jquery.com/ticket/11076

...