Javascript 传递Ctrl+;单击事件以在Firefox中添加其他元素

Javascript 传递Ctrl+;单击事件以在Firefox中添加其他元素,javascript,jquery,Javascript,Jquery,据我所知,Firefox不会将Ctrl+Click从标签传递到目标输入字段。我不知道如何才能做到这一点。我有复选框字段,这些字段是隐藏的,它们各自的标签的样式是唯一的和可见的。。。单击标签时,单击“注册”,但单击“控制”不会 这有点老套,但它很管用: 标签 $(函数(){ var cb=$(“#cb”); var isFirefox=navigator.userAgent.toLowerCase().indexOf('firefox')>-1; $(“标签”)。单击(函数(e){ if(e.c

据我所知,Firefox不会将Ctrl+Click从标签传递到目标输入字段。我不知道如何才能做到这一点。我有复选框字段,这些字段是隐藏的,它们各自的标签的样式是唯一的和可见的。。。单击标签时,单击“注册”,但单击“控制”不会

这有点老套,但它很管用:


标签
$(函数(){
var cb=$(“#cb”);
var isFirefox=navigator.userAgent.toLowerCase().indexOf('firefox')>-1;
$(“标签”)。单击(函数(e){
if(e.ctrlKey&&isFirefox){
var checked=cb.prop(“checked”);
cb.prop('选中',!选中);
}
});
});
首先,将
单击
事件附加到
标签
,而不是
输入
。这样,按住ctrl键时不会阻止事件,但复选框状态不会更改。因此,在回调中,我们检查
e.ctrlKey
,如果是真的,我们手动更改该复选框的状态


请注意,我添加了
isFirefox
复选框,因为虽然此功能修复了Firefox中的行为,但在其他浏览器中却会出现问题。

这有点黑客行为,但它可以:


标签
$(函数(){
var cb=$(“#cb”);
var isFirefox=navigator.userAgent.toLowerCase().indexOf('firefox')>-1;
$(“标签”)。单击(函数(e){
if(e.ctrlKey&&isFirefox){
var checked=cb.prop(“checked”);
cb.prop('选中',!选中);
}
});
});
首先,将
单击
事件附加到
标签
,而不是
输入
。这样,按住ctrl键时不会阻止事件,但复选框状态不会更改。因此,在回调中,我们检查
e.ctrlKey
,如果是真的,我们手动更改该复选框的状态

请注意,我添加了
isFirefox
复选框,因为虽然此功能修复了Firefox中的行为,但它在其他浏览器中会中断。

我假设html为

<form>
 <label for="home" id="lblhome">home</label>
 <input type="checkbox" name="home" id="home"><br>
</form>
因此,现在为标签检查创建处理程序如果是ctrl+单击如果是,则创建一个jquery事件,并在复选框中将其ctrlKey属性更改为true和trigger

$('#lblhome').click(
function(e){
  if(e.ctrlKey) {
    alert('ctrl+click on label');

    //cancel the normal click 
    e.preventDefault();
    e.stopPropagation();

    e2 = jQuery.Event("click");        
    //e2.which = 50;        //   for other key combos like CTRL+A+click 
    e2.ctrlKey = true;
    $( "#home").triggerHandler(e2);
    $( "#home").prop("checked", !$( "#home").prop("checked"));//toggle checkbox state
   }
});
演示:

我假设html是

<form>
 <label for="home" id="lblhome">home</label>
 <input type="checkbox" name="home" id="home"><br>
</form>
因此,现在为标签检查创建处理程序如果是ctrl+单击如果是,则创建一个jquery事件,并在复选框中将其ctrlKey属性更改为true和trigger

$('#lblhome').click(
function(e){
  if(e.ctrlKey) {
    alert('ctrl+click on label');

    //cancel the normal click 
    e.preventDefault();
    e.stopPropagation();

    e2 = jQuery.Event("click");        
    //e2.which = 50;        //   for other key combos like CTRL+A+click 
    e2.ctrlKey = true;
    $( "#home").triggerHandler(e2);
    $( "#home").prop("checked", !$( "#home").prop("checked"));//toggle checkbox state
   }
});

演示:

接近我所需要的,但不完全是,不过有用的信息是+1。我会记住这一点。接近我所需要的,但不完全是,有用的信息+1。我会记住这一点。