Jquery 如何定位元素
此问题是关于带有子菜单的列表菜单中的触摸事件。其目的是通过一次触摸->延伸,第二次触摸缩回进行操作(在移动设备上)。触摸另一项->其延伸和先前的收缩 问题是:iPad4.3.3非常好用。iPhone5.1和Android 4-2nd touch可收缩和延伸。不是预期的效果。从您的移动设备中签出。谢谢你的关注 这是jQuery还是移动操作系统中的一个bugJquery 如何定位元素,jquery,ios,Jquery,Ios,此问题是关于带有子菜单的列表菜单中的触摸事件。其目的是通过一次触摸->延伸,第二次触摸缩回进行操作(在移动设备上)。触摸另一项->其延伸和先前的收缩 问题是:iPad4.3.3非常好用。iPhone5.1和Android 4-2nd touch可收缩和延伸。不是预期的效果。从您的移动设备中签出。谢谢你的关注 这是jQuery还是移动操作系统中的一个bug $(document).ready(function () { if((navigator.userAgent.match(/i
$(document).ready(function () {
if((navigator.userAgent.match(/iPhone|iPod|iPad|Android/i))) {
$('#nav li').click(function(){
// attach a click event listener to provoke iPhone/iPod/iPad's hover event
// Amended the next 3 lines
var $this_li = $(this);
$('#nav li ul').slideUp(function() {
$('ul', $this_li).slideDown();
});
});
} else {
// This part works in non-mobile browser
$('#nav li').hover(
function () {
//show its submenu
$('ul', this).slideDown(200);
},
function () {
//hide its submenu
$('ul', this).slideUp(200);
}
);
}
});
这段代码正在做它应该做的事情,您正在告诉$(This)向下滑动,
但您也在向上幻灯片中捕获相同的项目,使其先向上再向下幻灯片
尝试此方法,而不是在导航项目集合中循环
向上滑动除单击的对象外的所有对象,向下滑动仅单击的对象
//...in the click event
var $this_li = $(this);
$('#nav li').each(function(index) {
if ( this != $this_li ) {
$('ul', this).slideUp();
}
else {
$('ul', $this_li).slideDown();
}
});
我不是jquery专家,但这应该很接近了。经过几个小时的反复试验,以下更改最终达到了在触摸设备上镜像悬停事件的预期效果。也就是说,对于具有子菜单的菜单项(使用id且不带类属性):
$('#nav li').click(function() {
var $selected_li = $(this);
if ($('ul', $selected_li).is(':visible')) {
$('#nav li ul').slideUp();
}
else {
$('#nav li ul').slideUp(function() {
$('ul', $selected_li).slideDown();
});
}
});
您需要另一个if语句,用于与您的代码不兼容的浏览器。您对改进的jquery有什么建议吗?谢谢。(你会认为我是新手)这看起来很有效,但是现在的子菜单(产品和推荐品)不会下滑。看。我已经向这两个分支添加了一个警报。是的,我看到了-看起来这不起作用,如果($(this)!=$this_li)就像我说的,不是jquery专家可能会修复它jquery必须包装这个指针,我很确定。再次感谢。这仍然有一些不正确的地方。同样的结果
slideUp()
会被调用10次以上……这是因为您没有使用类来标识菜单。但它应该找到“自己”,让除它自己之外的所有人都发疯,然后让自己倒下。不知道为什么这样做行不通
$('#nav li').click(function() {
var $selected_li = $(this);
if ($('ul', $selected_li).is(':visible')) {
$('#nav li ul').slideUp();
}
else {
$('#nav li ul').slideUp(function() {
$('ul', $selected_li).slideDown();
});
}
});