0

我有以下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 但不显示它。我完全迷路了。有人有想法么?

编辑这是基本的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>
4

1 回答 1

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();
});
于 2013-05-16T23:31:45.647 回答