2016-05-25 9 views
0

(jquery)変更イベントハンドラから変更イベントをトリガしたものを見つけることができますか?キーコードを取得/クリック/変更イベントをトリガー

私の使用例:入力[type = text]アイテムの動的リストがあります。ユーザーが最後の空のアイテムを塗りつぶした場合、別のアイテムの新しい入力[type = text]を追加します。ユーザーがタブを押した(変更イベントを発生させた)場合は自動フォーカスしたいのですが、たとえばユーザーがどこかをクリックしたときなどはそうではありません(変更がトリガーされていますが、

簡略化した例:

https://jsfiddle.net/yxu82p1o/1/

<input type=text> 
<script> 
function addMore() { 
    $('input').off('change.addMore'); 
    $('<input type=text>').insertAfter($('input').last()).on('change.addMore', addMore); 
} 
$('input').on('change.addMore', addMore); 
</script> 

PS。私は、別のキーアップイベントをアタッチし、そこからキーを押さえるなどの回避策を見つけ出すことができますが、それが原因で何が起こったのかをチェンジイベントから見つけることははるかに簡単でクリーンです。

+2

'addMore引数にe'追加します。その後、'キーボードやマウス – bozdoz

+0

@bozdozため 'e.button'ためe.which'をチェックし、' addMore(e)を ' - ' e.which'と 'e.button'は' change'で 'undefined'になります。少なくともchromeでは、または何かがここにないのですか? – DavidDomain

答えて

1

これはオプションです。 イベントをinput要素でリッスンし、TABキーがイベントをトリガーし、要素がinput要素の場合は、イベントをinput要素でトリガーします。その後、動的に追加されたinput要素をフォーカスします。

function addMore() { 
 
    $('input').off('change.addMore'); 
 
    $('<input type=text>').insertAfter($('input').last()).on('change.addMore', addMore); 
 
} 
 
$('input').on('change.addMore', addMore); 
 

 
$('body').on('keydown', 'input', function(e){ 
 
    var keyCode = e.keyCode || e.which; 
 
    if (keyCode == 9 && this.tagName === "INPUT") { 
 
    e.preventDefault(); 
 
    $(this).change(); 
 
    $(':text').last().focus(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<input type=text>

+0

ありがとう、これは非常に単純な回避策ですが、解決策はまだあります。変更イベントの原因を特定できる場合は、直接回答がない場合は受け入れます) – amik

+0

問題ありません。私は 'text'型の入力要素がフォーカスを失ったときに' change'イベントから 'keyCode'情報を取得する方法を知らないのですが、他の誰かが良いアイデアを持っているかもしれません。しかし、持っているといいですね。 ;) – DavidDomain

関連する問題