jQuery eq不适用于移动游猎

时间:2013-05-16 21:37:27

标签: javascript jquery jquery-mobile

我有以下js:

$('.overlayWrap').on('click', '.overlaySwitch', function(event) {
    var $this = $(this),
        $overlayRegisterWrap = $('.overlayRegisterWrap li'),
        type = $(this).data('go');

        event.preventDefault();
        $overlayRegisterWrap.hide();
        $overlayRegisterWrap.eq(type).show();
});

它可以在firefox,chrome和safari中运行,但是一旦我在手机上试用它就会隐藏所有的li,但之后却没有显示正确的li。如果我控制台注销$overlayRegisterWrap.eq(type),它会找到正确的li但不显示它。我完全迷失了。有人有什么想法吗?

EDIT 这是基本的html结构:

<div id="Overlay" style="" class="overlayWrap" focus="">
    <ul class="overlayRegisterWrap">
        <li style="display: none;">
            //some crazy code
            <a class="overlaySwitch" data-go="1">Login</a>
        </li>
        <li style="display: none;">
            //some crazy code
            <a class="overlaySwitch" data-go="2">Register</a>
        </li>
        <li style="display: none;">
            //some crazy code
            <a class="overlaySwitch" data-go="3">Next</a>
        </li>
        <li style="display: none;">
            //some crazy code
            <a class="overlaySwitch" data-go="1">Forgot</a>
        </li>
        <li style="display: none;">
            //some crazy code
            <a class="overlaySwitch" data-go="2">Register</a>
        </li>
    </ul>
</div>

1 个答案:

答案 0 :(得分:0)

问题是您将字符串传递给jQuery.fn.eq,但它只接受数字。您必须将数据值“转换”为整数。在您的情况下,以下应该可以解决问题:

$('.overlayWrap').on('click', '.overlaySwitch', function(event) {
    var $this = $(this),
        $overlayRegisterWrap = $('.overlayRegisterWrap li'),
        type = $(this).data('go') << 0; // We you the bitwise operatir to parse the data-string to an integer

        event.preventDefault();
        $overlayRegisterWrap.hide();
        $overlayRegisterWrap.eq(type).show();
});