单击标签内的链接时如何防止复选框检查
我在标签内有一个链接。 问题是,当用户在阅读完术语后单击“返回”时,将取消选中该复选框,因为当他们点击链接时,他们也同时取消选中该框,因为该链接位于标签内。
如何在单击链接时阻止选中复选框? 尝试在标签点击时执行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小提琴的例子