JQuery.on() и .delegate() не работают на iPad
Если вы попробуете этот фрагмент на рабочем столе, все будет работать.
Всякий раз, когда вы пытаетесь использовать его на iPad, он ничего не сделает.
$('body').on('click', '#click', function() {
alert("This alert won't work on iPad");
});
div {
font-size: 24px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="click">Click here</div>
Ответы
Ответ 1
Это мобильная ошибка/функция Safari: события click не будут пузыряться до самого тела.
Добавление onclick=""
является известным обходным решением, но IMHO проще прикрепить ваш слушатель к первому дочернему элементу <body>
.
Смотрите: http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
Ответ 2
Измените стиль курсора тела на iOS на "указатель", и все будет работать отлично. Вам не нужно добавлять onclick = "" на каждый элемент, который вы хотите использовать для клики...
<script type="text/javascript">
$(function() {
// The trick
if (/ip(hone|od)|ipad/i.test(navigator.userAgent)) {
$("body").css ("cursor", "pointer");
}
// The test
$("body").on("click", "#click", function() {
alert("This also works on iOS !");
});
});
</script>
<div id="click">Click here</div>
Я знаю, о чем вы сейчас думаете: "WTF!".
Ответ 3
Я не уверен, почему это не работает, возможно, это ошибка, но там есть хороший обходной путь. Просто поставьте onclick=""
в div, который вы делегируете, и он будет отлично работать
<div id="click" onclick="">Click here</div>
<script>
$("body").on("click", "#click", function() {
alert("This works on iPad");
});
</script>
fiddle
Ответ 4
В iOS существует отсутствие пузырьков событий без стиля курсора.
Поэтому в вашем CSS вам нужно добавить cursor: pointer;
к элементу.
$('body').on('click', '#click', function() {
alert("This alert won't work on iPad");
});
#click {
font-size: 24px;
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="click">Click here</div>
Ответ 5
я нашел решение на http://www.danwellman.co.uk/fixing-jquery-click-events-for-the-ipad/
выполните следующий подход:
var isIPad = function() {
return (/ipad/i).test(navigator.userAgent);
};
var isIPhone = function() {
return (/iphone/i).test(navigator.userAgent);
};
var isIPod = function() {
return (/ipod/i).test(navigator.userAgent);
};
и где вы привязываете обработчик click-event-обработчика:
var eventName = (isIPod() || isIPad() || isIPhone()) ? "touchstart" : "click";
// if you are using jquery-mobile
eventName = (isIPod() || isIPad() || isIPhone()) ? "touchstart" : "vclick";
$(".selector").bind(eventName, function(e) {
//do something here
});
// or
$(document).on(eventName, ".selector", function(e) {
//do something here
});
что он.
Ответ 6
Я столкнулся с этой проблемой на iPhone 5C и ниже.
Это сработало для меня:
body {
cursor:pointer;
}
Ответ 7
У меня возникла проблема с сообщением, которое я добавляю к телу html. Я нашел эту проблему на [Событие jQuery "click" не работает в Safari iOS?
Я использовал этот
$('body').on('click touchstart', 'someselect', function(){})
И он работал на iPhone 4S и iPhone 5S