#javascript #jquery #css
#javascript #jquery #css
Вопрос:
Я пытаюсь использовать jQuery для подключения прослушивателя к моей навигации, чтобы я мог показывать: эффекты наведения на устройствах Apple touch.
Кажется, я не могу заставить его слишком работать с тем, что у меня есть до сих пор, кто-нибудь использовал это раньше?
<script>
$(document).ready(function() {
//ipad and iphone fix
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
$("#primary-navigation li a").bind('touchstart', function(){
console.log("touch started");
});
$("#primary-navigation li a").bind('touchend', function(){
console.log("touch ended");
});
}
});
</script>
Я добавил предупреждение непосредственно перед моими селекторами, которое, похоже, работает…
Комментарии:
1. Какая часть не работает, обнаружение браузера, привязка события или
console.log
? Вы получаете сообщение об ошибке или …?2. Похоже, что наведение не работает, я не получаю сообщение об ошибке в своей консоли. В моих тегах <a> у меня есть текст для рендеринга cufon, так может ли это быть проблемой?
3. У вас есть дополнительный
});
после второгоconsole.log()
— это просто опечатка в вашем вопросе, или ваш реальный код такой?4. Извините, это опечатка в моем вопросе
5. Хорошо, попробуйте добавить a
console.log() or alert()
сразу послеif
(перед привязкой события), чтобы хотя бы подтвердить, чтоif
это работает (кстати, вы можете выполнить этот тест с помощью одного регулярного выражения). И отредактируйте свой вопрос, чтобы исправить опечатку.
Ответ №1:
Во-первых, если вы используете jQuery до версии 1.4.3, попробуйте связать события с .live()
помощью вместо .bind()
. Это гарантирует, что вы будете привязываться к этому событию даже для будущих, динамически вводимых новых элементов, отвечающих на соответствие селектора.
Если вы используете jQuery 1.4.3 , но ранее 1.7, используйте .delegate()
вместо .bind()
.
Если вы используете jQuery 1.7 , тогда используйте .on()
.
Тем не менее, если ваш тест выполняется на iPhone или iPad, используйте alert()
вместо console.log() , поскольку вы вряд ли сможете проверить console
выходные данные на этих устройствах.
Я также могу указать, что опубликованная вами разбивка разметки нарушена, так как у вас в </cufon
элементе отсутствует символ ‘>’. Похоже, это может быть проблемой копирования-вставки.
Наконец, я вижу, что вы используете события touch *; Я должен предположить, что вы используете jQuery Mobile, jQTouch или что-то в этом роде?
Потому что, если вы не на одном из них, я сильно сомневаюсь, что вы могли бы зарегистрировать слушателей для событий касания, поскольку базовый jQuery не имеет представления для них в своем собственном API.
Ответ №2:
Я добавил предупреждение…
$("nav#primary-navigation ul li a").bind('touchstart', function(){
console.log("touch started");
alert('clicked');
});
Который работает при нажатии, поэтому я знаю, что я все правильно нацеливаю, есть ли теперь способ отключить щелчок по ссылке на ul li a?