在阅读本书中的jQuery in Action和处理第一个事件处理示例时,我发现jQuery不会一致地克隆DOM Level 0事件。它克隆内联事件,但不包括那些定义为属性的事件。阻止使用内联事件处理程序可能是件好事,但是是否有意设计?什么是想从遗留页面克隆一些东西?jQuery克隆:它应该克隆DOM级别0事件吗?
下面是本书中给出的例子的一个变化,以说明行为。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>DOM Level 0 Events Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js">
</script>
<script type="text/javascript">
$(function(){
$('#testElement')[0].onclick = function(event) {
say(this.id + ' Click ASSIGN [DOM 0]');
}
$('#testElement').click(function() { say(this.id + ' Click JQUERY [DOM 2]');});
$('#testElement').clone(true).attr('id',"clonedElement").insertAfter($('#testElement'));
});
function say(text) {
$('#console').append('<div>'+text+'</div>');
}
</script>
</head>
<body>
<div id="testElement" style="border: solid brown 1px; margin: 10px; width : 100px; height: 100px;" onclick="say(this.id + ' Click INLINE [DOM 0]')"> </div>
<div id="console"></div>
</body>
</html>
它也不是真的在非IE浏览器中工作。内联事件处理程序被赋值onclick = ....覆盖,但内联事件处理程序,而不是属性分配被复制到FF和chrome中的克隆。 – 2010-01-08 19:12:04
我编辑答案 – 2010-01-08 20:59:17
感谢您的解决。我想知道是否应该将这个错误提交给好的jQuery人员。 – 2010-01-08 21:11:44