Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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 在jQuery中绑定除输入和文本区域外的箭头键_Javascript_Jquery_Keyboard_Key Bindings - Fatal编程技术网

Javascript 在jQuery中绑定除输入和文本区域外的箭头键

Javascript 在jQuery中绑定除输入和文本区域外的箭头键,javascript,jquery,keyboard,key-bindings,Javascript,Jquery,Keyboard,Key Bindings,我发现了关于用jQuery绑定箭头键的一个极好的问题:有一个很好的解决方案: 除外:这会阻止箭头键在焦点位于文本输入字段时正常工作 当当前焦点位于输入、文本区域或其他内容可编辑区域时,如何修改此解决方案以允许箭头键正常工作?将其置于以下条件中: $(document).keydown(function(e) { if(!$(e.target).is(':input, [contenteditable]')){ switch(e.which){ //

我发现了关于用jQuery绑定箭头键的一个极好的问题:有一个很好的解决方案:

除外:这会阻止箭头键在焦点位于文本输入字段时正常工作


当当前焦点位于输入、文本区域或其他内容可编辑区域时,如何修改此解决方案以允许箭头键正常工作?

将其置于以下条件中:

$(document).keydown(function(e) {
    if(!$(e.target).is(':input, [contenteditable]')){
        switch(e.which){
           // the cases as is
        }
        e.preventDefault(); // prevent the default action (scroll / move caret)
    }
});

把它放在一个条件下:

$(document).keydown(function(e) {
    if(!$(e.target).is(':input, [contenteditable]')){
        switch(e.which){
           // the cases as is
        }
        e.preventDefault(); // prevent the default action (scroll / move caret)
    }
});

您可以使用event.target获取event的target元素,以便进行检查

var $target = $(e.target);
if($target.is("input") || $target.is("textarea")) {
    //
}

您可以使用event.target获取event的target元素,以便进行检查

var $target = $(e.target);
if($target.is("input") || $target.is("textarea")) {
    //
}

您的可编辑元素可能有一些公共类

$('.input').keypress(function(event) {

    var charCode = (evt.which) ? evt.which : event.keyCode

    switch(charCode) {
        case 37: // left
        break;

        case 38: // up
        break;

        case 39: // right
        break;

        case 40: // down
        break;

        default: return; // exit this handler for other keys
    }
    e.preventDefault();  
});

您的可编辑元素可能有一些公共类

$('.input').keypress(function(event) {

    var charCode = (evt.which) ? evt.which : event.keyCode

    switch(charCode) {
        case 37: // left
        break;

        case 38: // up
        break;

        case 39: // right
        break;

        case 40: // down
        break;

        default: return; // exit this handler for other keys
    }
    e.preventDefault();  
});

只需检查--
.is(':input')
也包括文本区域吗?当然<代码>:输入涵盖了所有的输入元素,包括文本区、选择、按钮等。我认为测试可能更简单:
如果(!$(e.currentTarget).is(':input,[contenteditable]'){
因为
.is()
使用一个选择器,该选择器可以具有用逗号分隔的
条件。对吗?我认为它应该是
e.target
,而不是
e.currentTarget
currentTarget
将始终是
document
,因为这是侦听器设置的元素。是的,我读过,它说
它总是引用事件处理程序与事件发生的元素相对应的是附加到元素的ers。目标用于标识事件发生的元素。
这意味着在这种情况下,
currentTarget
将始终是
document
。只需检查--
。即(“:input”)
也包括文本区域?当然!
:input
包括所有输入元素,包括textarea、select、button等。我认为测试可能更简单:
如果(!$(e.currentTarget).is(':input,[contenteditable]'){
,因为
.is()
使用一个选择器,该选择器可以具有用逗号分隔的
条件。对吗?我认为它应该是
e.target
,而不是
e.currentTarget
currentTarget
将始终是
document
,因为这是侦听器设置的元素。是的,我读过,它说
它总是引用与event.target相反,event.target标识事件发生的元素。
这意味着在这种情况下,
currentTarget
将始终是
文档。这与我想要的相反。我想将键绑定到上一个和下一个函数除非焦点在输入中(其中箭头键用于移动光标),否则将无法使用。这与我想要的相反。我希望将键绑定到上一个和下一个功能,除非焦点在输入中(其中箭头键用于移动光标)。