2009-12-11 47 views
8

快速問題 - 是否有可能檢測焦點是來自鼠標點擊還是來自焦點事件的選項卡?我可以檢測焦點的來源嗎? (Javascript,jQuery)

我猜如果沒有,我將不得不在相同的元素上使用點擊控制來確定源,但我更喜歡從焦點事件的方式。

感謝

Gausie

+0

+1,因爲它是一個有趣的問題。但我不明白你爲什麼需要這種區別。 – 2009-12-11 14:38:17

+0

我正在爲快速輸入提供數據輸入表單。如果用戶在框中標籤,我想滾動,以便元素在屏幕中垂直居中。但是,如果他們點擊,效果會變得非常迷惑,我不希望它發生。 – Gausie 2009-12-11 14:43:21

回答

4

可能無法正常工作100%,但如果沒有一個直接的方法,然後你就不能使用Mouseover和檢測呢?這個人會把鼠標放在控件上來選擇它(?)

+2

你也可以選擇控制以及... – Mickel 2009-12-11 14:44:10

+1

是的,如果數據輸入到控件中,並且在輸入數據之前沒有發生鼠標移動,它可以使用「tab」鍵:) – Shoban 2009-12-11 14:45:17

+0

THanks - 這是一個好主意。下面是我用 \t \t \t \t $代碼( '輸入')。鼠標懸停(函數(){ \t \t \t \t \t $(本)。ATTR( '點擊', '真'); \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('background-color','yellow'); \t \t \t \t \t如果{ \t \t \t \t \t \t警報(1)($ this.attr( '點擊')= '真'!); $('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 $(本)。家長( 'TR')的CSS( '背景色', '透明');。。 \t \t \t \t}); – Gausie 2009-12-11 14:55:51

0

我很自信,焦點事件不會導致焦點已被排序(window.focus,key,click ...) )。

但是在點擊的情況下,您可以檢測到鼠標點擊。您也可以檢測鍵盤事件(更多關於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'); 
}); 
相關問題