在閱讀本書中的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