2014-07-15 41 views
13

我有这个标签标签内的链接也触发复选框,如何防止?

<label><input type="checkbox"> I aggree to the <a href="terms">terms</a> and would like to continue</label> 

但是:

  • 标签内的链接打开基础5显示模式

  • 这工作正常,但点击链接启用 复选框

我怎么能防止这种情况发生?

THX,

+1

复选框不能嵌套元素。 –

+4

@MilindAnantwar - 这与什么有关? – Quentin

+0

那么违反HTML规则是否正确? –

回答

0
Try this.. 
<label> 
     <input type="checkbox" /> I aggree to the <a href="terms">terms</a> and would like to continue 
</label> 
+0

标签不要必须在非XHTML文档类型中自行关闭,原始发布者的HTML是有效的。 –

4

互动元素会导致这样的功能的问题:它是不确定的,当你点击一个label元素内的a元素,反之亦然会发生什么。为避免这种情况,请从label元素中取出a元素,例如,

<label><input type="checkbox">I agree</label> to the <a href="terms">terms</a> 
and would like to continue 

<input type="checkbox" id="agree"><label for="agree">I agree</label> to the 
<a href="terms">terms</a> and would like to continue 
7

你应该只需要一个事件绑定到调用event.stopPropagation()event.preventDefault()

JQuery的在标签上的所有链接的链接:

$(document).on("tap click", 'label a', function(event, data){ 
    event.stopPropagation(); 
    event.preventDefault(); 
    window.open($(this).attr('href'), $(this).attr('target')); 
    return false; 
}); 

纯javascript(你需要在你想要的链接上设置一个id OW)

var termLink = document.getElementById('termLink'); 
var termClickHandler = function(event) { 
    event.stopPropagation();  
    event.preventDefault(); 
    window.open(termLink.href, termLink.target); 
    return false; 
}; 
termLink.addEventListener('click', termClickHandler); 
termLink.addEventListener('touchstart', termClickHandler); 

这些期望的链接目标设置为_self_blank在同一窗口或新窗口中分别打开。

6

由于多个标签可以指向相同的复选框,因此可以将文本修改为由两个标签(指向复选框)和中间的锚文本组成。

<input id="cb" type="checkbox"> 
 
<label for="cb">I agree to the</label> 
 
<a href="#">terms</a> 
 
<label for="cb">and would like to continue</label>

使用上述技术,点击链接不会影响复选框的状态,但所有剩余的文本一样。

0

另一种直列方式:

<label> 
    <input type="checkbox"> 
    I aggree to the 
    <span onclick="event.stopPropagation();"> 
      <a href="terms">terms</a> 
    </span> 
    and would like to continue 
</label>