Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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手动调用focus()不会触发整个事件_Javascript_Jquery - Fatal编程技术网

Javascript jQuery手动调用focus()不会触发整个事件

Javascript jQuery手动调用focus()不会触发整个事件,javascript,jquery,Javascript,Jquery,当我单击文本输入或使用tab键时,此事件将被触发,并且工作正常: //highlight input contents and row/col when clicked $("input[type=text]").focus(function() { //highlight input contents $(this).select(); //highlight new row/col $(this).parent().siblings().first().cs

当我单击文本输入或使用tab键时,此事件将被触发,并且工作正常:

//highlight input contents and row/col when clicked
$("input[type=text]").focus(function() {
    //highlight input contents
    $(this).select();

    //highlight new row/col
    $(this).parent().siblings().first().css({"color":"#f2f7fa"}); //row
    var index = $(this).parent().index();
    $(this).parent().parent().siblings().first().children().eq(index).css({"color":"#f2f7fa"}); //col
});
但是,当手动调用focus方法时

//arrow keys move focus to adjacent cells
$(document).keydown(function(e){
    if (e.keyCode == 37) { //left
        var $inputs = $('input[type=text]');
        $inputs.eq($inputs.index($('input[type=text]:focus')) - 1).focus();
    }
});

…输入内容未突出显示,即选择不起作用。但行/列的文本将高亮显示!因此,只有函数的第二部分起作用!为什么会这样?

编辑:抱歉,我的第一个答案不正确,因为我对这个问题有误解。试试这个

问题是箭头键有特殊的行为-我不确定具体是什么导致了这种情况,但阻止默认行为将解决它。下面第三行至最后一行:

//单击时突出显示输入内容和行/列 $input[type=text].focusfunction{ //突出显示输入内容 $this.select; //突出显示新的行/列 $this.parent.sides.first.css{color:f2f7fa};//行 var index=$this.parent.index; $this.parent.parent.sibbins.first.children.eqindex.css{color:f2f7fa};//col }; $document.keydown函数{ 如果e.keyCode==37{//left var$inputs=$'input[type=text]; $inputs.eq$inputs.index$'input[type=text]:focus'-1.focus; e、 防止违约; } 如果e.keyCode==39{//right var$inputs=$'input[type=text]; var nextix=$inputs.index$'input[type=text]:focus'+1; nextitx=nextitx>=$inputs.length?0:nextitx; $inputs.eqnextix.focus; e、 防止违约; } };
呼叫。焦点不会触发焦点事件。您可以使用.trigger'focus'手动触发事件,但通常最好显式调用该函数,这样您就不会陷入递归循环。@mpen谢谢,但如果是这样,当我手动调用.focus时,第一个函数的第二部分怎么会起作用呢?也就是说,//highlight new row/col?下的部分无法回答这个问题。也许通过一个工作示例,我可以告诉您发生了什么。@torjinx您需要防止箭头键的默认行为,请参见下面我的答案。这很有效,非常感谢!我想我明白了-当相邻的输入被赋予焦点时,箭头键的默认行为触发了取消选中的文本@torjinx是的,我认为这可能是原因,很高兴听到它为你修复了它!