2017-02-03 10 views
0

をトリガしません、このイベントがトリガされますし、完璧に動作します:しかしjQueryの(フォーカスを呼び出す)は、手動でイベント全体

//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 
}); 

、フォーカス()メソッド手動で呼び出されます...

//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(); 
    } 
}); 

...入力内容は強調表示されません。 select()は機能しません。しかし、行/列のテキストが強調表示されています!したがって、関数の2番目の部分だけが機能します!何故ですか?

+0

以下の最後の行を呼び出す '.focusに()'フォーカスイベントをトリガしません。 '.trigger( 'focus')'でイベントを手動でトリガすることはできますが、通常は再帰的ループにならないように関数を明示的に呼び出すほうがよいでしょう。 – mpen

+0

@mpenありがとうございますが、そうであれば、 '.focus()'を手動で呼び出すと、最初の関数の2番目の部分がどのように働くのでしょうか?つまり、 '// new row/col'の下の部分は? – torjinx

+0

それに答えることはできません。たぶん、実際の例があれば、私はあなたに何が起こっているかを伝えることができます。 – mpen

答えて

1

編集:謝罪、私の最初の答えは、質問の誤解のために間違っていた。これを代わりに試してみてください...

矢印キーに関連付けられた特別な動作があります。具体的に何が原因であるかはわかりませんが、デフォルトの動作を妨げることで修正されます。 (第3 :)

//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 
 
}); 
 

 
$(document).keydown(function(e){ 
 
    
 
    if (e.keyCode == 37) { //left 
 
     var $inputs = $('input[type=text]'); 
 
     $inputs.eq($inputs.index($('input[type=text]:focus')) - 1).focus(); 
 
     
 
     e.preventDefault(); 
 
    } 
 
    
 
    if (e.keyCode == 39) { //right 
 
     var $inputs = $('input[type=text]'); 
 
     var nextIdx = $inputs.index($('input[type=text]:focus')) + 1; 
 
     nextIdx = nextIdx >= $inputs.length ? 0 : nextIdx; 
 
     $inputs.eq(nextIdx).focus(); 
 
     
 
     e.preventDefault(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" value="test"> 
 
<input type="text" value="test"> 
 
<input type="text" value="test"> 
 
<input type="text" value="test">

+0

これはうまくいきました。私は理解していると思います。隣接する入力にフォーカスが当たったとき、矢印キーのデフォルトの動作がトリガされ、テキストの選択が解除されました! – torjinx

+0

@torjinxはい私はそれらの行に沿って何かが原因であったかもしれないと思った、それはあなたのためにそれを固定聞いてうれしい! –

関連する問題