我在我的网站上有这个代码:
$('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
)未在提交按钮上显示,但它在代码中定义。这有什么关系?我在控制台中没有错误。
答案 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.href
为http://yourdomain.com/home
,但this.getAttribute("href")
为/home
。
对于您当前的实施,这是无关紧要的。但是,如果href属性以#开头,或者在#之前有不同网站的网址,或许您想要检查以后。