将Ctrl + Click事件传递给Firefox中的另一个元素

时间:2016-06-15 04:25:19

标签: javascript jquery

根据我的理解,Firefox不会将Ctrl + Click从标签传递到目标输入字段。我对如何实现这种行为感到茫然。我有隐藏的复选框字段,以及它们各自标注的唯一且可见的标签...单击标签时,单击寄存器,但控制单击不会。

2 个答案:

答案 0 :(得分:1)

这有点hacky,但它有效:http://jsbin.com/dogelehena/edit?html,console,output

<input type="checkbox" id="cb">
<label for="cb">Label</label>

<script>
$(function () {
  var cb = $('#cb');
  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;

  $('label').click(function (e) {
    if (e.ctrlKey && isFirefox) {
      var checked = cb.prop('checked');
      cb.prop('checked', !checked);
    }
  });
});
</script>

首先,将click事件附加到label而不是input。这样,按住ctrl时不会阻止事件,但复选框状态不会更改。因此,在回调中,我们会检查e.ctrlKey,如果确实如此,我们会手动更改该复选框的状态。

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

答案 1 :(得分:1)

我认为html为

<form>
 <label for="home" id="lblhome">home</label>
 <input type="checkbox" name="home" id="home"><br>
</form>

我想要一件事,如果ctrl + cliked其他东西,如果它只是点击,复选框点击代码

$( "#home" ).click( function( e) {
if(e.ctrlKey)
  alert('i just got ctrl+cliked');
else
 alert('i just got clicked');
});

现在创建标签检查的处理程序,如果它是ctrl +单击,如果是,则创建一个jquery事件并将其 ctrlKey 属性更改为true,触发它在复选框上。

$('#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
   }
});

DEMO:https://jsfiddle.net/35g41aaL/