jquery click和js onclick

来源:百度知道 编辑:UC知道 时间:2024/09/23 23:45:23
谁知道jquery click事件和js onclick事件的原理。比如:
<html>
<head>
<script type="text/javascript" src="jquery-132min2.js"></script>
</head>
<body>
<input type="button" id="bt" value="Click" />
<input type="button" onclick="change()" value="OnClick" />
<script type="text/javascript">
function change(){
alert("I am here!");
}
$("#bt").click( function() {
alert("haha");
});
</script>
</body>
</html>
click如果放到head中将会不执行,只有在该元素的下面才有效,而onclick不论在什么位置都会执行,哪位帮忙解释下?谢谢
回复1楼:$("#bt") 得到的元素个数为0(你可以alert($("#bt").length看一下)),所以没能将对应的事件注册给 id="bt" 的按钮,
这个我知道,但是让我困惑的是,第一次调用click时没有得到id为bt的node这个可以理解,但是当等页面彻底加载完,或者说过一段时间之后再点击按钮的时候,为什么click还是不会被调用,难道这个时候id为bt的node还是没有找到,还是加载时没有找到这个node以后就不在找这个

js脚本只执行一次而已,至于之后点击响应那是第一次执行的时候绑定在那个按钮事件上的脚本而已,你第一次就没绑定上,以后当然也不好使
如果想在上面写的话这样
$(function(){
$("#bt").click( function() {
alert("haha");
});
});
但是我还是建议你把代码写在下面,这样不会因为某些额外元素没有载入完成而影响了网页的逻辑

我刚看了楼上的回复,最好的解决方案我认为是放在下面,就算放在上面也不用写
$(document).ready(fn)那么麻烦,只要$(fu);就搞定了 这两个是等同的

click可以理解为一次简单的触发,只执行一次,找不到以后就不再执行;
onclick则是给这个id注册一种行为,可以重复触发

<script type="text/javascript">
……
$("#bt").click( function() {
alert("haha");
});
</script>
这段代码如果放在 head 中, 在 IE 浏览器中执行 HTML 代码是从上到下一路下来的,当执行到
$("#bt").click( function() {
alert("haha");
});
时(此时 dom 节点中尚无 id 为 bt 的node), $("#bt") 得到的元素个数为0(你可以alert($("#bt").length看一下)),所以没能将对应的事件注册给 id="bt" 的按钮,如果在 firefox 中,情况则不一样了, fire 是将所有 dom 节点加载完成后才执行 javascript 代码,所以在 firefox 浏览器中不管你的这段 javascript 代码是在 head 部分还是该元素下面,都