【问题标题】:HTML Dropdown's redirection(using JS) not working on mobile, but works fine on PCHTML Dropdown 的重定向(使用 JS)在移动设备上不起作用,但在 PC 上工作正常
【发布时间】:2015-02-23 11:04:15
【问题描述】:

我的页面上有一个下拉菜单:

<div class="dropdown" data-method="redirect">
    <select id="weekselect">
        <option>Select a week</option>

        <option value="http://sample.com/page1/action">This Week</option>

    </select>
</div>

当一个被选中时,它将被重定向到页面http://sample.com/page1/action。它在 PC 上运行良好,但是当在移动设备上查看该网站时,重定向不起作用,它只是重定向到一个页面 undefined

做重定向的JS代码是:

$(window).load(function (event) {

    $(document).on('click','#menu-bars', function (event) {
        $('body').toggleClass('nav-collapsed');
        $.scrollTo(0, 'fast');
    });

    var selectList = $('select');

    if( !$('html').is('.touch') ){
        selectList.select2({
            minimumResultsForSearch: -1
        });
    }

    selectList.on("change", function (e) {
        var parent = $(this).parents('.dropdown');
        var method = parent.data('method');


        if (method == 'redirect') {
            window.location = e.val;
        }

可能是在移动设备上查看该网站时,window.location = e.val; 不包含任何值。

重定向页面时js不工作的可能原因是什么?

【问题讨论】:

    标签: javascript jquery mobile


    【解决方案1】:

    不要使用e.val,而是尝试使用$(this).val();

    也可以使用window.location.href重定向

    【讨论】:

    • 我试试这个:window.location.href = $(this).val();现在它可以在移动设备上重定向(我刚刚在chrome中测试过。)是什么原因改变代码?
    • 要重定向到新页面,需要更新window.location.href的值。在您的代码中,您将覆盖 window.location 这是一个包含所有位置元、哈希、方法等的对象
    【解决方案2】:

    你需要改变

    if (method == 'redirect') {
                window.location = e.val;
            }
    

    if (method == 'redirect') {
                window.location = $(this).val();
            }
    

    e 不是调用对象,而是事件对象。见the docs


    真的应该把方法改成:

    selectList.on("change", function (e) {
            var caller = $(this);
            var parent = caller.parents('.dropdown');
            var method = parent.data('method');
    
    
            if (method == 'redirect') {
                window.location = caller.val();
            }
    

    将多次调用保存到$(this) 效率更高。


    parents() 也可以返回多个对象,尤其是在您使用类选择器时,因此您在该区域的代码不是很健壮。如果你期望倍数,你应该处理它(也许使用each()),如果你不使用parent() 来代替

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多