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