2014-05-03 44 views
1

我想检查何时锚标记没有href值,即使href存在于标记中,然后向用户显示消息。例如。jQuery检查href是否未定义

HTML:

注意 - 我不能改变这种定位的标签的定义方式,所以我不能添加HREF =””,在HTML是由WordPress的填充,我不想改变它

的jQuery:

$('a').click(function (e) { 
    if ($(this).attr('href') == '') { 
     alert('We do not have more info on this'); 
     e.preventDefault(); 
    } 
}) 

然而,上述代码只能当HREF被定义为FOL低点:

<a href="" ></a> 

如何更改我的jQuery来检查HREF存在,但不是在我的HTML定义,像上面?我尝试以下,但无法正常工作或:

if ($(this).attr('href') === undefined) { 

感谢

回答

0

你也可以使用如选择:

$('a:not([href]), a[href=""]').click(function (e) { 
    alert('We do not have more info on this'); 
    e.preventDefault(); 
}) 
3

两个undefined和一个空字符串是falsy,所以你有要做的是直接检查属性,而不是专门检查空字符串

$('a').click(function (e) { 
    if (! $(this).attr('href')) { 
     alert('We do not have more info on this'); 
     e.preventDefault(); 
    } 
}); 

FIDDLE

+0

此作品谢谢。但是为什么Alert框会弹出所有没有定义href的定位标记?不是e.preventDefault();假设将警报限制为仅当前元素? – DextrousDave

+0

Nope,preventDefault阻止默认操作,即从锚点导航,但不阻止没有hrefs的锚点被点击。 – adeneo

+0

问题是我没有点击其他元素。当我单击没有href的一个元素时,那么警报会生成DOM中所有其他元素,而不会定义href ......我该如何防止这种情况发生? – DextrousDave

1

您可以检查它,undefinetrim价值和比较反对'',试试这个:

$('a').click(function (e) { 
    var href = $(this).attr('href'); 
    if (href === undefined || $.trim(href) === '') { 
     alert('We do not have more info on this'); 
     e.preventDefault(); 
    } 
}); 

Demo Link

相关问题