Я использую jQuery для скрытия и отображения элементов при изменении / нажатии группы переключателей. Он отлично работает в браузерах, таких как Firefox, но в IE 6 и 7 действие происходит только тогда, когда пользователь затем щелкает где-то еще на странице.
Чтобы уточнить, когда вы загружаете страницу, все выглядит нормально. В Firefox, если вы нажмете переключатель, одна строка таблицы будет скрыта, а другая отобразится немедленно. Однако в IE 6 и 7 вы щелкаете переключатель, и ничего не произойдет, пока вы не нажмете где-нибудь на странице. Только после этого IE перерисовывает страницу, скрывая и показывая соответствующие элементы.
Вот jQuery, который я использую:
$(document).ready(function () {
$(".hiddenOnLoad").hide();
$("#viewByOrg").change(function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByProduct").change(function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
});
Вот часть XHTML, на которую это влияет. Вся страница проверяется как XHTML 1.0 Strict.
<tr>
<td>View by:</td>
<td>
<p>
<input type="radio" name="viewBy" id="viewByOrg" value="organisation"
checked="checked" />Organisation</p>
<p>
<input type="radio" name="viewBy" id="viewByProduct" value="product" />Product</p>
</td>
</tr>
<tr class="visibleOnLoad">
<td>Organisation:</td>
<td>
<select name="organisation" id="organisation" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
<tr class="hiddenOnLoad">
<td>Product:</td>
<td>
<select name="product" id="product" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
Если у кого-то есть идеи, почему это происходит и как это исправить, они были бы очень признательны!
источник
click
отличается от того,change
что его обработчик событий также будет вызываться при нажатии уже выбранной опции, тогда какchange
этого не происходит. В этом ответе есть пример того, как использовать jQuery.data
для сравнения старых и новых значений.Проблема с использованием
click
события вместоchange
заключается в том, что вы получаете событие, если выбран тот же переключатель (т.е. фактически не изменился). Это можно отфильтровать, если вы проверите, что новое значение отличается от старого. Меня это немного раздражает.Если вы используете
change
событие, вы можете заметить, что оно распознает изменение после того, как вы щелкнете любой другой элемент в IE. Если вы звонитеblur()
вclick
случае, это будет вызыватьchange
событие огня (только если коробки радио на самом деле имеют измененный).Вот как я это делаю:
Теперь вы можете использовать событие изменения как обычно.
Изменить: добавлен вызов focus () для предотвращения проблем с доступностью (см. Комментарий Бобби ниже).
источник
Вы пробовали событие IE onpropertychange? Не знаю, имеет ли это значение, но, вероятно, стоит попробовать. IE не запускает событие изменения, когда значения обновляются с помощью JS-кода, но, возможно, в этом случае будет работать onpropertychange.
источник
Это тоже должно работать:
Спасибо, Пьер. Это было очень полезно.
источник
click
на,click keyup keypress
чтобы добавить поддержку клавиатуры.В IE вы должны использовать событие click, в других браузерах onchange. Ваша функция может стать
источник
click
на,click keyup keypress
чтобы добавить поддержку клавиатуры.добавить этот плагин
затем
источник
У меня была такая же проблема с вводимым текстом.
Я изменился:
в
и у меня все работает нормально!
источник
Это простой способ указать IE запускать событие изменения при щелчке по элементу:
Вы можете расширить это до чего-то более общего, чтобы работать с большим количеством элементов формы:
источник
Я почти уверен, что это известная проблема с IE. Добавление обработчика
onclick
события должно решить проблему:источник
В IE принудительно установите радио и флажки для запуска события "изменения":
источник
с jquery 1.6 это больше не проблема .. не уверен, когда это было исправлено .. Слава богу, хотя
источник
Если вы измените версию jQuery на 1.5.1, вам не придется корректировать код. Тогда IE9 будет идеально слушать:
http://code.jquery.com/jquery-1.5.1.min.js
источник
трюк с щелчком работает ... но если вы хотите получить правильное состояние радио или флажка, вы можете использовать это:
источник
imo использование щелчка вместо изменения делает поведение IE другим. Я бы предпочел эмулировать поведение события изменения с помощью таймера (setTimout).
что-то вроде (предупреждение - код блокнота):
источник
попробуйте это, это работает для меня
источник
Это может кому-то помочь: вместо того, чтобы начинать с идентификатора формы, выберите идентификатор выбора и отправьте форму при изменении, например:
и jQuery:
(Очевидно, что кнопка отправки необязательна, если javascript отключен)
источник
Попробуйте следующее:
источник
Избегайте использования .focus () или .select () перед .Кнопкой () функция JQuery для IE, то он работает нормально, им использовать его на моем сайте.
Спасибо
источник
источник
Пожалуйста, попробуйте использовать каждый вместо изменения / щелчка , который отлично работает даже в первый раз в IE, а также в других браузерах.
Не работает в первый раз
Работает нормально даже с первого раза
источник