【问题标题】:JQuery href preventdefault issue with anchorJQuery href 防止锚点的默认问题
【发布时间】:2015-11-22 14:13:43
【问题描述】:

我有一个链接如下。

<a href="#" id="tab3Link">Tab 3</a>

在标签 2 上,当点击 标签 3 时,我想首先验证标签 2 中的表单是否正确填写。

    $("#tab3Link").click(function(e){
        e.preventDefault();
        $("#tab3Link").prop("href", "#");
            if(validateTab2()){
                $("#tab3Link").prop("href", "#tab3Info");
                return true;
            }else{
                return false;
            }
    });  

#tab3Info 锚应该将页面带到一个新的 div。但点击不会发生。但是,如果我在 URL 末尾手动附加 #tab3Info 并按 Enter 键,页面将移动到新选项卡。所以在上面的函数中,虽然href变了,但是点击函数并没有发生。

当 JQuery 1.4.2 与 Jquery mobile 1.1.0 一起使用时,这可以正常工作。当 JQuery 升级到 1.9.1 并且 Jquery mobile 升级到 1.3.2 时会出现问题。

【问题讨论】:

    标签: javascript jquery jquery-mobile href preventdefault


    【解决方案1】:

    jQuery prop() 方法的使用不适用,因为它在元素中设置了一个属性(在您的情况下为 #tab3Link)。但是你想操纵位置值。

    代替:

    $("#tab3Link").prop("href", "#tab3Info");
    

    您可以使用:

    window.location.hash  = 'tab3Info';
    

    或:

    window.location += '#tab3Info';
    

    【讨论】:

    • 在之前版本的代码中,$("#tab3Link").attr("href", "#tab3Info");被使用。它不适用于我在问题中提到的 jquery 升级。这就是我用 prop 替换 attr 的原因。仍然没有用。 siracoj 的回答奏效了。我也试试这个。
    【解决方案2】:

    不要返回true,而是尝试:

        $(this).unbind('click');
        $(this).click();
    

    【讨论】: