2011-03-29 45 views
0

如果jQuery腳本塊出現在頁面中的html標籤之前,jQuery是否可以將事件綁定到元素?jQuery腳本之前的HTML元素

舉個例子,這不起作用:

<script> 
    $('a').bind('click', function() { 
    alert($(this).attr("innerHTML")); 
</script> 

<a href="#Hello">Greetings</a> 

是的,我只是把劇本中的元素之後,但嘿,也許我不想。只是好奇,如果這是唯一的方法。

+2

P.s. .attr(「innerHTML」)是否適合你? – 2011-03-29 07:45:09

+0

確實如此。 – 2011-03-29 08:07:24

回答

5

是的,如果你把一個ready[docs]事件處理程序的代碼(和修復你的語法錯誤;)):

$(function() { 
    $('a').bind('click', function() { 
     alert(this.innerHTML); 
     // jQuery way would be: $(this).html() 
    }); 
}); 
+0

謝謝!另外,我測試了你的例子,看到「this.AttrName」起作用,並且比我的版本更乾淨,但我在網上看到的每個例子(包括jQuery網站上的片段)都使用「$(this).attr (「AttrName」)「語法。是否有任何技術原因(超出可讀性)爲什麼您的示例中的語法更受歡迎? – 2011-03-29 08:02:55

+0

@Hello_jQuery:如果你已經有一個jQuery對象,那麼使用'attr'會更容易。但是如果你可以確定每個瀏覽器都存在一個HTML屬性(例如'href'作爲鏈接),那麼就不需要先把它包裝爲jQuery對象。您通常不會將其用於* DOM對象*的屬性,即'innerHTML'。 jQuery訪問這個的方式是'$(this).html()'。 HTML屬性和DOM對象的屬性之間有區別。 – 2011-03-29 08:09:27

1

使用jQuery就緒功能:http://api.jquery.com/ready/

<script> 
    $(document).ready(function() { 
    $('a').bind('click', function() { 
    alert($(this).attr("innerHTML")); 
    } 
</script> 

<a href="#Hello">Greetings</a> 

注意,代替使用$(this).attr("innerHTML")你可以簡單地做$(this).html()

0

是的,但是將代碼包裝在$(function(){...})中以告訴jquer y一旦Dom被完全加載就執行它,此時所有元素都將可用。

1

另一種方式是在$(window).load()事件

$(window).load(function() { 
    $('a').bind('click', function() { 
    alert($(this).attr("innerHTML")); 
}); 

執行腳本現在,一旦所有的文檔完全加載的bind會發生。