2011-08-08 42 views
3

我們都知道,你可以模擬點擊或任何其他事件中使用這些方法之一的元素:點擊JavaScript和jQuery中的源代碼,人爲還是自動?

$('#targetElement').trigger('eventName'); 
$('#targetElement').click(); 

我所遇到的情況是,我應該知道的元素如何點擊。我應該知道它是否通過代碼自動點擊,或通過按下鼠標按鈕。無論如何,我可以做到這一點沒有黑客或變通辦法?我的意思是,瀏覽器的事件對象,JavaScript或jQuery中是否有內容可以告訴我們點擊是由人爲操作還是由代碼啓動的?

+0

可能重複[確定是否給定的JavaScript操作已被用戶發起(http://stackoverflow.com/questions/5948350/determine-whether-a-given -javascript-action-has-been-by-user-by-user) – alex

回答

6

試試這個:

$('#targetElement').click(function(event, generated) { 
    if (generated) { 
     // Event was generated by code, not a user click. 
    } else { 
     // Event was generated by a user click. 
    } 
}); 

然後,使這項工作,你有可能引發他們是這樣的:

$('#targetElement').trigger('click', [true]); 

this jsfiddle

+0

謝謝@cdhowie,但這是一種解決方法,我已經知道了:)。我試圖知道是否有任何內置的方式。 –

3

檢出event.which,如果通過代碼觸發它將會是undefined

$(document).click(function(event) { 
    if (event.which) { 
     // Triggered by the event. 
    } else { 
     // Triggered with code. 
    } 
}); 

jsFiddle

+0

錯誤。這是一個jQuery對象。該元素已通過jQuery使用'$('#elementId')。click()'進行點擊。 –

+0

在Chrome中測試,我真的有更好的運氣,使用'if(event.srcElement)' –

+0

@ josh.trow:我嘗試在Firefox中,它似乎並不支持該事件屬性。 :( – cdhowie

-5

在您的直接事件處理函數中,提供一個e參數。如果點擊是自動的(通過代碼),這個網絡將是不確定的(無需檢查e.target作爲@alex說):

$('#targetElement').click(function(e){ 
    if(e) 
    { 
     // Click is triggered by a human action 
    } 
    else 
    { 
    // Click is triggered via code 
    } 
}); 
+1

你甚至有麻煩測試嗎?這不起作用 - 請參閱http://jsfiddle.net/ZPD8w/ –

+0

在Firefox中不起作用;提供事件參數。 – cdhowie

+0

我爲我工作。我不知道@josh例子有什麼不同。但就我而言,它的工作。然而,我回復這個帖子作爲我的答案。 –

2

這裏有一種方法,我發現(在Chrome測試)

$('#foo').click(function(e) { 
    if (e.originalEvent) 
     alert('Has e (manual click)'); 
    else 
     alert('No e (triggered)'); 
}); 

看到這裏的測試:http://jsfiddle.net/ZPD8w/2/

+0

在Firefox中可用。 – cdhowie