2009-12-11 5 views
8

簡単な質問 - フォーカスがマウスクリックかフォーカスイベントのタブかどうかを検出できますか?フォーカスのソースを検出できますか? (Javascript、jQuery)

もしそうでなければ、私はソースを決定するために同じ要素にクリックハンドルを使用する必要がありますが、私はフォーカスイベントからの方法を好むでしょう。

おかげ

Gausie

+0

+1それは興味深い質問だから。しかし、私はあなたがその区別が必要な理由を見落とす。 –

+0

私は迅速な入力のためのデータ入力フォームを作っています。ユーザーがボックスの中に入ると、要素が画面の中央に垂直になるようにスクロールします。しかし、彼らがクリックすると、その効果は非常に間違ったものになり、私はそれが起こりたくはありません。 – Gausie

答えて

4

が100%に動作しない場合がありますが、その後直接的な方法がない場合は、あなただけMouseoverを使用して、それを検出することができませんか?その人はマウスをコントロール上に持ってきてそれを選択します(?)

+2

コントロールにタブすることもできます... – Mickel

+1

はいコントロールにデータが入力されていて、データを入力する前にマウスオーバーが発生していない場合は、「タブ」を使用できます:) – Shoban

+0

THanks - これは良い考え。ここで私は \t \t \t \t $( '入力')。マウスオーバー(関数(){ \t \t \t \t \t $(this)を使用するコードです。attr( 'click'、 'true'); \t \t \t \t}); \t \t \t \t $( '入力')マウスアウト(関数(){ \t \t \t \t \t $(この).removeAttr( 'クリック'); \t \t \t \t})。 \t \t \t \t $( '入力')(関数(){ \t \t \t \t \t $これは= $(これは)集中; \t \t \t \t \t $ this.parents( 'tr')。css( '背景色'、 '黄色'); \t \t \t \t \t場合{ \t \t \t \t \t \t警告(1)($ this.attr( 'クリック')= 'true' に!)。 \t \t \t \t \t \t $( 'body')scrollTop($ this.offset()。top - ($(window).height()/ 2)); \t \t \t \t \t} \t \t \t \t})。 \t \t \t \t $( '入力')(関数(){ \t \t \t \t \t $(この).parents( 'TR')、CSS( '背景色'、 '透明性')ぼかし; を\t \t \t \t}); – Gausie

0

フォーカスイベントがトラッキングされていると確信しています(window.focus、key、c​​lick ...) )。

クリックの場合は、マウスのクリックを検出できます。キーボードイベントを検出することもできます(詳細はhttp://www.quirksmode.org/js/keys.html)。

0

マウスの位置はどうですか?

イベントハンドラでは、現在のマウスの位置をコントロールの領域と比較します。座標がコントロールの領域内にある場合、スクロールしないでください。

これはもちろん、要素をホバリングしてクリックせずにタブに移動できるため、完璧な解決策ではありません。しかし、あなたは混乱を減らそうとしているので、これは実際には良い副作用であるかもしれません。

マウスの位置を操作するときは、quirksmode.orgのスクリプトを使用します。私はJqueryもそれのためのいくつかの機能を提供するかもしれないと思う。

0

keyCodeを取得してみてください - 記事のリンク先はここにあります。最下部の注釈も同様に便利です。

http://www.geekpedia.com/tutorial138_Get-key-press-event-using-JavaScript.html

ここでの記事からコードです。それはそれは表示されませんが、タブのキーコードは9

<script type="text/javascript"> 

document.onkeyup = KeyCheck;  

function KeyCheck(e) 

{ 

    var KeyID = (window.event) ? event.keyCode : e.keyCode; 


    switch(KeyID) 

    { 

     case 16: 

     document.Form1.KeyName.value = "Shift"; 

     break; 

     case 17: 

     document.Form1.KeyName.value = "Ctrl"; 

     break; 

     case 18: 

     document.Form1.KeyName.value = "Alt"; 

     break; 

     case 19: 

     document.Form1.KeyName.value = "Pause"; 

     break; 

     case 37: 

     document.Form1.KeyName.value = "Arrow Left"; 

     break; 

     case 38: 

     document.Form1.KeyName.value = "Arrow Up"; 

     break; 

     case 39: 

     document.Form1.KeyName.value = "Arrow Right"; 

     break; 

     case 40: 

     document.Form1.KeyName.value = "Arrow Down"; 

     break; 
    } 

} 
</script> 
0

で、誰もが興味を持っていた場合は、ここで私はそれをやった方法は次のとおりです。

$('input').focus(function(){ 
    $this = $(this); 
    $this.parents('tr').css('background-color','yellow'); 
    if($this.attr('click')!='true'){ 
     $('body').scrollTop($this.offset().top-($(window).height()/2)); 
    } 
}).blur(function(){ 
    $(this).parents('tr').css('background-color','transparent'); 
}).mouseover(function(){ 
    $(this).attr('click','true'); 
}).mouseout(function(){ 
    $(this).removeAttr('click'); 
}); 
関連する問題