2012-09-14 36 views
1

可能重複:
In Jquery, how can I tell between a programatic and user click?預防的javascript產生的點擊

根據不同的瀏覽器中,有幾種方法,通過該鏈接可以「點擊」使用JavaScript。 (Pre9)

element.click(); ('click');

其他瀏覽器使用:

element.dispatchEvent(EVT),其中EVT是一個鼠標點擊事件。

我想確保實際的最終用戶操作是特定鏈接上事件的發起者。我現在使用的技術是重寫這些方法並過濾出單擊事件,但是在使用它們之前,通過將方法還原爲原型版本很容易被擊敗。

是否有任何可靠的跨瀏覽器方式來確定點擊事件是否由於直接用戶操作而觸發(它們實際上單擊了該元素)。

+0

您也可以掛鉤mousedown和mouseup事件,以及其他設備特定事件(如按鍵)。 –

+0

我相信那些也可以從javascript發出,對嗎? –

+1

http://stackoverflow.com/questions/6674669/in-jquery-how-can-i-tell-between-a-programatic-and-user-click。雖然請記住,如果您希望您的網站可以訪問並因此適應不同的輸入設備,這將變得越來越複雜。 –

回答

2

在Chrome,Firefox和Opera中,您可以使用Event.detail屬性(如果它未由initUIEvent()預定義)。

element.addEventListener('click', clickHandler, false); 
function clickHandler (e) { 
    if(e.detail > 0) { 
     /* 1 = user click */ 
    } else { 
     /* 0 = JS click */ 
    } 
    return; 
} 

Unfortenately e.detail回報1在IE9兩種情況下(而不會在較老的IE在所有的工作)。看來,IE中的事件屬性都完全相同(IE < 9,包括10,我不知道),儘管有點擊事件的來源。

+0

+1因爲這導致我event.isTrusted。 –