Jquery 如何定位元素

Jquery 如何定位元素,jquery,ios,Jquery,Ios,此问题是关于带有子菜单的列表菜单中的触摸事件。其目的是通过一次触摸->延伸,第二次触摸缩回进行操作(在移动设备上)。触摸另一项->其延伸和先前的收缩 问题是:iPad4.3.3非常好用。iPhone5.1和Android 4-2nd touch可收缩和延伸。不是预期的效果。从您的移动设备中签出。谢谢你的关注 这是jQuery还是移动操作系统中的一个bug $(document).ready(function () { if((navigator.userAgent.match(/i

此问题是关于带有子菜单的列表菜单中的触摸事件。其目的是通过一次触摸->延伸,第二次触摸缩回进行操作(在移动设备上)。触摸另一项->其延伸和先前的收缩

问题是:iPad4.3.3非常好用。iPhone5.1和Android 4-2nd touch可收缩和延伸。不是预期的效果。从您的移动设备中签出。谢谢你的关注

这是jQuery还是移动操作系统中的一个bug

$(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();
            });
        }
    });