单击标签内的链接时如何防止复选框检查

我在标签内有一个链接。 问题是,当用户在阅读完术语后单击“返回”时,将取消选中该复选框,因为当他们点击链接时,他们也同时取消选中该框,因为该链接位于标签内。

  

如何在单击链接时阻止选中复选框? 尝试在标签点击时执行event.preventDefault() ,但这不会阻止选中/取消选中复选框。

我可以从标签内部取出链接(这意味着更多的CSS样式)。 但现在我很好奇以上是否可行。

您可以通过onclick事件路由来取消点击事件。

“回归虚假”; part将阻止click事件向上移动到标签。

   

允许在新选项卡中打开target="_blank"链接也是一种很好的做法。

 /* Fix links inside of labels. */ $( 'label a[href]' ).click( function ( e ) { e.preventDefault(); if ( this.getAttribute( 'target' ) === '_blank' ) { window.open( this.href, '_blank' ); } else { window.location = this.href; } }); 

为什么不将标签外的链接移动?

  Terms 

只需添加“for”attibute即可防止冒泡

您可以在新窗口中打开链接,以便页面不会更改。

如果您不想这样做,您可以检查链接是否已被访问,然后自动选中该框。

我有类似的情况,但链接实际上打开一个新窗口时单击。 这不会选中/取消选中该框。 我相信这是因为点击不会通过指向标签的链接冒泡。

因此,为了扩展这一点,如果您希望链接在同一页面中打开,您可以使用单击处理程序将其打开,并防止点击链接冒泡,如下所示:

 $('label a').click(function(ev) { ev.preventDefault(); window.location.href = $(this).attr('href'); } 

(这是未经测试的,而不是最好用的JS,但它应该解决你的问题)

我同意最好的方法(可用性和易用性)是在新窗口中打开这些术语,但如果你想在同一个窗口中打开它,你可以使用这个小function:

 function stopLabel(e) { e.preventDefault(); window.location= 'https://stackoverflow.com/terms'; } 

你也可以将它们直接放入你的onclick中,但这是一个更好的imo。

您还必须将事件传递给函数:

  

如果您决定在新窗口中打开它,只需将window.location更改为window.open即可

链接应该在标签之外,而不是它的一部分,因为点击它将触发两个动作(打开链接并选中复选框)。

用户期望只触发一个动作,如果链接看起来像他希望被带到链接目标的链接,或者如果文本与复选框相关,则用户希望它检查复选框。

如果您可以在新选项卡中打开链接(我认为它更好,因为用户可能已在页面上填充了一些数据),即使没有js也可以处理

   

这是js小提琴的例子

http://jsfiddle.net/davo3/zkcv3L3d/