2011-03-29 67 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会发生。