#javascript #jquery #html #internet-explorer
#javascript #jquery #HTML #internet-explorer
Вопрос:
Я использую следующий код для маршрутизации событий щелчка по тегу img на входное радио под ним. Код отлично работает в Chrome и других браузерах, но в IE (в частности, в IE 11) я должен дважды щелкнуть, чтобы выбрать радио, а не просто щелкнуть одним щелчком мыши, чтобы выбрать радиовход. Может кто-нибудь, пожалуйста, скажите мне, что я делаю не так, чего здесь не хватает? Спасибо
<script type="text/javascript">
$(document).ready(function() {
$('#Img1').click(function() {
$('#radio1').trigger('click');
});
});
</script>
<div class="imagesPrev col four center">
<label class="label_radio images" for="radio1">
<div class="labelText">
<img id="Img1"src="image1.gif" alt="Image 1" />
<input type="radio" id="radio1" name="radio1" value="image1"/>
</div>
<div style="height:10px;"></div>
Image Title <br/>
</label>
</div>
Примечания:
— Я также заметил, что мне не нужно дважды щелкать, как обычный двойной щелчок, но это должно быть два щелчка. Это означает, что одним щелчком мыши я могу подождать примерно 10-15 секунд, а затем выполнить 2-й щелчок, чтобы событие щелчка было перенаправлено на радиовход.
Комментарии:
1. Как показано на рисунке, ваш пример, похоже, вообще не требует кода jQuery ( jsfiddle.net/TrueBlueAussie/uuLxm/1 ). Во всяком случае, ваш код может вызывать проблемы. Не могли бы вы показать свою реальную страницу с несколькими элементами управления?
2. … без полного документа для просмотра, а также объяснения довольно сложно устранить неполадки. полностью ли изображение покрывает ввод? я думаю, у меня есть ваше решение, просто пытаюсь понять, почему вы сделали то, что сделали….
3. Я должен зафиксировать, что это также работает для меня (скопировал ваш пример). Протестировано в IE11. Вы должны создать JSFiddle, чтобы показать ситуацию, в которой он не работает.
4. Привет @Mchan не могли бы вы найти какое-либо решение для этого?
Ответ №1:
Вы должны использовать .prop(); при работе с флажками / радиовходами.
$(document).ready(function() {
$('#Img1').click(function() {
var checkBox = $("#radio1");
checkBox.prop("checked", !checkBox.prop("checked"));
});
});
Комментарии:
1. Я не голосовал против, но он не работает под IE 11
2. Да, я проверил это O_o. Какую версию jQuery вы используете?
3. Странно, я обновил версию jquery в скрипке, и вот ее часть, работающая в IE11 … i.imgur.com/J8m38xB.png
4. кстати, когда я говорю, что он не работает, это не значит, что он не принимает клики. Это означает, что мне все равно нужно дважды щелкнуть по img, чтобы выбрать радио
5. На самом деле я до сих пор не могу понять, зачем специально делать двойной щелчок ?!! Это действительно странно
Ответ №2:
Пробовали ли вы вместо этого использовать label
тег с for
атрибутом для этой функции, это могло бы решить вашу проблему и повысить совместимость с браузером.
<label for="radio1"><img id="Img1"src="image1.gif" alt="Image 1" /></label>
<input type="radio" id="radio1" name="radio1" value="image1"/>
Я могу понять, если это не дает того, что вам нужно, но использование этого метода должно работать с использованием HTML-разметки вместо jQuery
относительно ужасный jsfiddle, демонстрирующий это: http://jsfiddle.net/andyface/d25KS /
Комментарии:
1. Попробовал, но это не сработало. При таком подходе ни щелчок, ни двойной щелчок не работают.
2. странно, можете ли вы опубликовать jsfiddle, в котором есть ваша реализация этого, чтобы увидеть, связано ли это как-то с тем, как вам приходится использовать HTML
3. Я добавил весь HTML-код, окружающий радиовход, и img
4. Я добавил ваш HTML-макет в jsfiddle ( jsfiddle.net/andyface/K6tzq ) и это работает. Когда вы нажимаете на изображение, метка выполняет свою работу и выбирает правильный переключатель, поэтому не уверен, почему это не сработает для вас в вашей текущей реализации. Часть jQuery на самом деле не требуется, но я добавил ее, чтобы проверить предложение @TrueBlueAussie, а затем прокомментировал его.
Ответ №3:
Я помню, что некоторые версии IE не поддерживают щелчки по объектам, отличным от ссылок или кнопок: (
Возможно, попробуйте использовать:
$("#radio1").checked(true);
или
$("#radio1").selected(true);
в качестве обходного пути
Комментарии:
1. Пробовал оба проверенных, выбранных, но ни один из них не работал. Я не получаю никакого ответа при их использовании либо по щелчку, либо по двойному щелчку
Ответ №4:
Все просто, вам не нужно использовать для этого никакой Jquery, просто храните все внутри label
:
<label for="radio_btn">
<img id="img"src="image1.gif" alt="Image here" />
<input type="radio" id="radio_btn" name="radio1" value="image1"/>
</label>
Работает здесь: http://jsfiddle.net/fals/3phf4 /
Комментарии:
1. Был более ранний ответ с тем же подходом, и, основываясь на коде в моем вопросе, он не сработал. Пожалуйста, обратите внимание, что я привязан к коду в моем вопросе
2. @MChan Это отлично работает и в моем IE10. Демонстрационная версия, предоставленная Fals, не работает в вашем IE11? (Если это сработает, значит, происходит что-то еще, о чем вы нам не говорите!) Кстати, поскольку переключатель вложен внутри
<label>
, это также работает безfor
атрибута: jsfiddle.net/C2j7t
Ответ №5:
Ваш пример кода отлично работает в IE11 (desktop и metro). Возможно ли, что на странице есть другое событие щелчка, которое фиксирует и предотвращает событие щелчка на изображении? Может быть, что-то приводит к потере фокуса страницы (первый щелчок фокусирует окно, второй щелкает изображение)? Попробуйте поместить оповещение в функцию щелчка, чтобы узнать, регистрируется ли щелчок. Если это не проблема, попробуйте запустить тело функции в консоли, чтобы узнать, является ли это проблемой. Вы можете попробовать другие способы запуска события, как предлагали другие. Или попробуйте метод jQuery .triggerHandler («click»).
Ответ №6:
Я думаю, что ваша проблема может быть связана с вашей разметкой. У вас есть ваше изображение и события щелчка внутри метки.
Согласно w3schools: «… если пользователь нажимает на текст внутри элемента, он переключает элемент управления». http://www.w3schools.com/tags/tag_label.asp
Возможно, этот переключатель мешает вашему javascript. Попробуйте переместить разметку за пределы метки и посмотреть, поможет ли это.
Ответ №7:
Это просто :).
#img1 инкапсулируется внутри
<label class="label_radio images" for="radio1">
Итак, без части jQuery он уже работает. Теперь при наличии части jQuery один щелчок станет двойным щелчком:
1) элемент ‘for’ label_radio
2) триггер в части jQuery
Итак, для x-browser вы не должны переносить img внутри метки. Или попробуйте отменить событие в $(‘#Img1’).click(функция (событие) { …
Ответ №8:
У вас есть как ваш img
, так и radio
завернутый label
. Поведение HTML по умолчанию заключается в том, что щелчок по ярлыку запускает радио / флажок внутри.
Есть два способа решить вашу проблему:
- Полностью удалите функцию javascript.
- Если есть дополнительные причины для javascript, измените разметку html и переместите radio за пределы метки. Также удалите
for
атрибут, потому что он запускает выбор радио. Что-то вроде этого:<div class="imagesPrev col four center"> <label class="label_radio images"> <div class="labelText"> <img id="Img1"src="image1.gif" alt="Image 1" /> </div> </label> <input type="radio" id="radio1" name="radio1" value="image1"/> <div style="height:10px;"></div> Image Title </div>
Ответ №9:
<script type="text/javascript">
$(document).on('click','.Img1',function()
{
var checkBox = $(".radio1");
checkBox.prop("checked", !checkBox.prop("checked"));
});
</script>
<img class="Img1" src="image1.gif" alt="Image 1" />
<input type="radio" class="radio1" name="radio1" value="image1"/>
Ответ №10:
Я сталкиваюсь с той же проблемой, и это очень странно …. обходной путь, который работает для меня, заключается в том, что вместо использования функции триггера.. поместите код , который выполняется в событии триггерного щелчка , в функцию javascript и вызовите эту функцию вместо события триггера … пример приведен ниже. Для этого примера я буду использовать оповещение в случае щелчка по элементу с идентификатором radio1.
Event definition
$('#radio1').on('click',function () {
alert("Hi");
})
So Instead of using $('#radio1').trigger('click'); we can put the alert in a javascript function and call the javascript function where ever i am calling the trigger click event.
Javascript function
function triggerClick(){
alert("Hi")
}
and just call this function(triggerClick()) where ever you are using $('#radio1').trigger('click');
Пожалуйста, дайте мне знать, если это будет полезно
Ответ №11:
Попробуйте использовать .click() вместо .trigger(‘щелчок’).:
<script>
$(document).ready(function() {
$('#Img1').click(function() {
$('#radio1').click();
});
});
</script>
это должно сработать, смотрите Здесь для получения дополнительной информации
Комментарии:
1.
.click()
при вызове объекта jQuery, как в этом коде, это просто сокращение для.trigger("click")
. для доступа к базовому объекту dom вы можете использовать.get(0)
api.jquery.com/jquery.get2. Вот источник, ответственный за jquery
.click()
кстати. Смотрите строки 6 и 14: github.com/jquery/jquery/blob /…