Javascript 怪异的a+;标签&x2B;输入交互
Javascript 怪异的a+;标签&x2B;输入交互,javascript,jquery,input,label,anchor,Javascript,Jquery,Input,Label,Anchor,$(文档).ready(函数(){ $('a')。单击(函数(e){ log('a clicked'); 如果($('.is_-force:checked')。长度){ $(this).最近的('div')。查找('input')。单击(); } e、 预防默认值(); }); $('label[for]')。单击(函数(e){ log('label clicked'); }); $(“输入[id]”)。单击(函数(e){ var$input=$(此); //if($input.is('[typ
$(文档).ready(函数(){
$('a')。单击(函数(e){
log('a clicked');
如果($('.is_-force:checked')。长度){
$(this).最近的('div')。查找('input')。单击();
}
e、 预防默认值();
});
$('label[for]')。单击(函数(e){
log('label clicked');
});
$(“输入[id]”)。单击(函数(e){
var$input=$(此);
//if($input.is('[type=radio]'))$input.prop('checked','checked');
console.log('input clicked',$input.is(':checked');
设置超时(
函数(){
log($input.is(':checked'));
},
0
);
});
});代码>
单击链接时强制复选框/单选单击
正文
正文
正文
在带有文本链接的复选框上单击链接,我可以看到它勾选了勾选框,然后立即取消勾选。所以它触发了两次事件,而不是根本没有。@freedomn-m,我对此表示怀疑:如果事件触发两次,我们也会看到两次“a clicked”、“label clicked”、“input clicked”消息。您使用的浏览器是什么?我希望在代码段中看到console,所以在浏览器中没有注意到它。点击链接
作为文本链接
的一部分,我在Chrome浏览器控制台中得到两个事件:点击js:44标签点击js:52。是的,我可以看到的视觉效果对应于控制台中的两个事件。回答您的问题:您想要的不是preventDefault
,而是e.stopPropagation
。锚点事件正在触发,带有“防止默认值”(因此不会重定向到“#”),但仍在传播到标签[for]。使用a
处理程序中的stopPropagation
,标签[for]
不会获取事件。因此,您只能在控制台中点击一个(并且复选框不会发生任何变化,因为您阻止默认设置)。在So中快速搜索会显示矛盾的问题-一些人抱怨链接没有勾选(大部分是旧问题),一些人抱怨链接没有勾选。所以看起来它是特定于浏览器(和版本)的。示例:在带有文本链接的复选框上,单击链接,我可以看到它在勾选复选框,然后立即取消勾选。所以它触发了两次事件,而不是根本没有。@freedomn-m,我对此表示怀疑:如果事件触发两次,我们也会看到两次“a clicked”、“label clicked”、“input clicked”消息。您使用的浏览器是什么?我希望在代码段中看到console,所以在浏览器中没有注意到它。点击链接
作为文本链接
的一部分,我在Chrome浏览器控制台中得到两个事件:点击js:44标签点击js:52。是的,我可以看到的视觉效果对应于控制台中的两个事件。回答您的问题:您想要的不是preventDefault
,而是e.stopPropagation
。锚点事件正在触发,带有“防止默认值”(因此不会重定向到“#”),但仍在传播到标签[for]。使用a
处理程序中的stopPropagation
,标签[for]
不会获取事件。因此,您只能在控制台中点击一个(并且复选框不会发生任何变化,因为您阻止默认设置)。在So中快速搜索会显示矛盾的问题-一些人抱怨链接没有勾选(大部分是旧问题),一些人抱怨链接没有勾选。所以看起来它是特定于浏览器(和版本)的。例子: