閱讀下面,它討論瞭如何繞過這個問題之前,讓我來回答更充分爲什麼你不得不開始與問題:
現代瀏覽器採取基於之類的東西的鼠標按鈕,您點擊鏈接不同的動作,無論你持有移/按Ctrl/Alt鍵,等等。例如,在Chrome中,如果您中途點擊鏈接而不是點擊左鍵,瀏覽器將自動在新標籤中打開該窗口。
當您使用.click()
時,jQuery必須對您點擊的「方式」做出假設 - 並且您會得到默認行爲 - 在您的情況下,這不是正確的行爲。您需要以MouseEvents
設置的形式向瀏覽器指定「正確」設置,以解決問題。現在
,上的方式進行簡短的討論來解決它:
當您使用jQuery的.click()
事件不帶任何參數,這實際上不是「僞造點擊」有問題的元件。相反,根據在http://api.jquery.com/click/ jQuery的文檔:
...當.click()
被稱爲不帶參數,它是.trigger快捷方式(「點擊」)
這意味着,當你火$('#div1').click()
- 如果'click'
事件沒有實際的jQuery處理程序,則將獲得默認處理。所以,請考慮以下兩種情況:
案例1:
<a id='myLink' href='/some/link/'>Click me!</a>
<script type='text/javascript'>
$('#myLink').click();
</script>
在第一個場景中,.click()
調用不起任何作用,因爲沒有處理程序。該事件觸發,但沒有什麼可以捕捉並響應 - 因此使用a
標籤的默認處理,並且用戶被帶到/some/link/
--並且由於您沒有指定哪個鼠標按鈕或任何其他參數,它確實是默認的。
案例2:
<a id='myLink' href='/some/link/'>Click me!</a>
<script type='text/javascript'>
$('#myLink').bind('click', function (ev) {
ev.preventDefault();
ev.stopPropagation();
alert('you clicked me!');
}).click();
</script>
在這種情況下,因爲click
處理程序創建的,當用戶點擊該鏈接 - 在ev.preventDefault()
和ev.stopPropagation()
通話將停止默認從發生的歷史處理和警報將被解僱。
但是,在這一點上,您有一個代表MouseEvents
的ev
對象,並且您可以根據需要更改設置。例如,您可以執行以下操作:
ev.altKey = true; // Held Alt
ev.button = 1; // Middle Mouse Button
這些設置將更改處理事件的默認方法。
另類,非jQuery的解決方案
您也可以真正模擬通過調整下面的代碼按鈕單擊。
function fakeClick(event, anchorObj) {
if (anchorObj.click) {
anchorObj.click()
} else if(document.createEvent) {
if(event.target !== anchorObj) {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var allowDefault = anchorObj.dispatchEvent(evt);
// you can check allowDefault for false to see if
// any handler called evt.preventDefault().
// Firefox will *not* redirect to anchorObj.href
// for you. However every other browser will.
}
}
}
(爲了更全面落實,看原帖在:How can I simulate a click to an anchor tag? - 看看所選答案)
這實際上假的瀏覽器,以爲你的鼠標點擊的錨/ SPAN/etc通過以與瀏覽器的默認處理程序相同的方式從頭構建事件 - 除了可以覆蓋某些設置外。然而,我不建議這種方法,因爲它更容易打破跨瀏覽器應用程序,你必須弄清楚所有參數映射到的內容。
「_我不會深入到問題的細節_」......但這就是我們在這裏所做的。聽起來像別的東西不起作用,因爲'.click()'應該觸發點擊。 – Mathletics
可能是因爲按鈕在點擊時提交表單(我不記得這是否適用於'click'),或者它可能處理'mouseup'和/或'mousedown'事件而不是'click'。 – Ryan
@Shannon:如果我的回答對你有幫助,請接受它作爲正確答案,以便將此問題標記爲已解決。如果你仍然有問題,我很樂意提供幫助。謝謝! –