這SSCCE說明了一切:更改jQuery中克隆輸入元素的name屬性不工作在IE6/7
<!doctype html>
<html lang="en">
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#add').click(function() {
var ul = $('#ul');
var liclone = ul.find('li:last').clone(true);
var input = liclone.find('input');
input.attr('name', input.attr('name').replace(/(foo\[)(\d+)(\])/, function(f, p1, p2, p3) {
return p1 + (parseInt(p2) + 1) + p3;
}));
liclone.appendTo(ul);
$('#showsource').text(ul.html());
});
});
</script>
</head>
<body>
<ul id="ul">
<li><input type="text" name="foo[0]"></li>
</ul>
<button id="add">Add</button>
<pre id="showsource"></pre>
</body>
</html>
Copy'n'paste'n'run它,點擊Add
按鈕數次。在每一次點擊,你應該看到<ul>
的HTML代碼中<pre id="showsource">
露面和預期的代碼應該大致是:
<li><input name="foo[0]" type="text"></li>
<li><input name="foo[1]" type="text"></li>
<li><input name="foo[2]" type="text"></li>
<li><input name="foo[3]" type="text"></li>
這將按預期在FF,Chrome瀏覽器,Safari瀏覽器,Opera和IE8。
然而,IE6/7無法在改變name
屬性併產生類似:
<li><input name="foo[0]" type="text">
<li><input name="foo[0]" type="text">
<li><input name="foo[0]" type="text">
<li><input name="foo[0]" type="text"></li>
我googled了一下,發現this very similar problem,他固定它,並張貼一段代碼應該如何有樣子。不幸的是,這正是我已經完成的工作,所以我懷疑他只在IE8中測試,而不是在IE6/7中測試。除了谷歌沒有透露太多的特定主題外。
任何見解?或者我真的必須搶回document.createElement
?
注意:我知道我可以對每個輸入元素使用相同的名稱並將它們檢索爲數組,但以上只是一個基本示例,實際上我確實需要更改name屬性,因爲它不僅包含索引,還包含其他信息,例如parentindex,排序等。它用於添加/重新排列/刪除(子)菜單項。
編輯:這涉及到this bug,jQuery的(我使用的是1.3.2),因此似乎是不創造投入呀?下面的工作是正常的:
$('#add').click(function() {
var ul = $('#ul');
var liclone = ul.find('li:last').clone(true);
var oldinput = liclone.find('input');
var name = oldinput.attr('name').replace(/(foo\[)(\d+)(\])/, function(f, p1, p2, p3) {
return p1 + (parseInt(p2) + 1) + p3;
});
var newinput = $('<input name="' + name + '">');
oldinput.replaceWith(newinput);
liclone.appendTo(ul);
$('#showsource').text(ul.html());
});
但我無法想象我是唯一一個遇到過jQuery問題的人。即使簡單的$('<input>').attr('name', 'foo')
在IE6/7中也不起作用。是不是jQuery作爲一個交叉瀏覽器庫應該涵蓋這個問題之下的這個特定問題?
我遇到了同樣的問題,可以找到解決辦法:http://stackoverflow.com/questions/2773308/jquery-clone-problem – jantimon 2010-05-05 17:07:24