2011-11-14 35 views
3

我碰到一個好奇心jQuery中傳來:如果我叫.click()鏈路上的click調用事件處理程序,但該鏈接實際上不遵循(如果它在瀏覽器中點擊):爲什麼我不能在jQuery中單擊()鏈接?

<a id="link" href="http://www.google.com>Link</a> 

$("#link").click() // won't take me to Google 

但在普通的JavaScript,一切都按照我們的期望:

document.getElementById("link").click() // *will* take me to Google 

這顯然是intentional behaviour - 但我努力工作,爲什麼click開始實施這樣的 - 與鏈接一個特殊的例外?

小提琴這裏:http://jsfiddle.net/9a6sp/

爲了澄清:我不是問如何點擊鏈接JS,而是爲什麼在jQuery的默認行爲有效鏈接是不是點擊當你調用.click()

+2

原生的'.click()'是僅限IE的。 – SLaks

+0

@Smamatti:'.click()'是簡寫。 – SLaks

+0

不,那也行不通 - 但我並不真正想知道如何完成這項工作,而是爲什麼這不起作用。 –

回答

7

domelement.click()不支持跨瀏覽器重定向。如果您需要重定向的位置在一個鏈接,您可以使用:

window.location = $('#link').prop('href'); 
+2

事實上,'click()'方法甚至不存在於Chrome中的本地錨元素上,所以它不被任何東西支持。 – millimoose

4

jQuery.click()意味着一個單擊處理程序綁定到的元素。然而,它可以用來觸發使用jQuery的click()事件綁定。

jQuery.trigger()將觸發一個綁定的事件處理程序,如$(someElement).trigger("click");

如果你想觸發jQuery的鏈接我建議如下。

$(someelement).click(function() { 
    window.location = $(link).attr("href"); 
}); 
+0

不帶參數的「.click()」與調用「.trigger('click')」完全相同。 – Pointy

+0

@Pointy。我在第二句話中沒有說過嗎? –

+0

對不起,我試圖澄清,但我顯然失敗:-) – Pointy

-1

我只是猜測爲爲什麼 jQuery開發團隊選擇實現的事情這樣的,因爲我不是jQuery開發團隊,而是一個錨標記的導航方面可以通過其他被觸發用戶界面的行爲,而不只是用鼠標點擊。例如,在普通的舊javascript中,使用鍵盤激活元素不會觸發onClick動作,但它會觸發一個定位標記的導航操作。

換句話說,通過點擊鏈接,您只是使用幾種可能的機制之一來導航到引用的端點,但導航和點擊不是同一個事件,所以jQuery選擇了將點擊只是。

0

也許這就是你要找的? 首先,您需要附加一個點擊事件。 然後你可以使用觸發器來觸發它。

<html> 
<head title="jQuery Test"> 
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.7.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#blah').click(function() { 
       alert('clicked'); 
      }); 
      $('#blah').trigger('click'); 
     }); 
    </script> 
</head> 
<body> 
    <a id="blah" href="#">BLAH</a> 
</body> 
</html> 
0

爲什麼這是不行的,在的jsfiddle $('#link')不會選擇在HTML錨,並click()失敗。即使是類型選擇器$('a').href也會失敗。

http://jsfiddle.net/yangchenyun/L9EUS/

代碼工作在正常的瀏覽器。我已經測試了代碼在stackoverflow.com上的代碼 jQuery('a').eq(1).click()在鉻concole,它觸發徽標上的click()

所以結論,click()鏈接工作在jQuery()中。 jsfiddle.net已經中斷了正常的jQuery功能。

相關問題