jQuery代码与提交按钮冲突

时间:2016-05-23 21:08:34

标签: javascript jquery

我在我的网站上有这个代码:

    $('input[type="submit"], a').not('[target=_blank]').click(function(){
        var bad = this.href.lastIndexOf('#') >= 0 || this.href.indexOf('javascript') >= 0;
        if(!bad) {
            $(".load-overlay").show();
            return true;
        }
        return true;
    });

这应该在有效链接上显示加载屏幕;有效链接是href中没有javascript的链接,或者是href中的#。有效链接也没有target = _blank属性。

它正在完成它的工作,但它与提交按钮相冲突。

加载屏幕(.load-overlay)未在提交按钮上显示,但它在代码中定义。这有什么关系?我在控制台中没有错误。

1 个答案:

答案 0 :(得分:-1)

这是因为输入没有href属性。因此,当单击提交按钮时,将抛出TypeError异常。如果this.href存在,您必须在使用之前检查它。

更改

var bad = this.href.lastIndexOf('#') >= 0 || this.href.indexOf('javascript') >= 0;

var bad = typeof this.href !== "undefined" && (this.href.lastIndexOf('#') >= 0 || this.href.indexOf('javascript') >= 0);

修改

这解决了点击提交按钮时加载屏幕没有显示的问题,但是对于将来的更改,最好知道,this.href可能会返回与您预期不同的值。

this.href返回完整解析的网址,链接指向。如果您有相对网址的链接,则此值与HTML中的" href" -attribute不同。要获取HTML属性的确切值,请使用jQuery Function .attr或JavaScript函数getAttribute。

示例:<a href="/home">Home</a>

在这种情况下,this.hrefhttp://yourdomain.com/home,但this.getAttribute("href")/home

对于您当前的实施,这是无关紧要的。但是,如果href属性以#开头,或者在#之前有不同网站的网址,或许您想要检查以后。