Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 怪异的a+;标签&x2B;输入交互_Javascript_Jquery_Input_Label_Anchor - Fatal编程技术网

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中快速搜索会显示矛盾的问题-一些人抱怨链接没有勾选(大部分是旧问题),一些人抱怨链接没有勾选。所以看起来它是特定于浏览器(和版本)的。例子: