Tôi đã viết một số Javascript để cho phép chỉnh sửa danh sách các mục trong một biểu mẫu HTML, bao gồm việc thêm và xóa các mục. Có nó hoạt động trong Firefox. Khi thử nó trong Internet Explorer, tôi thấy rằng bất kỳ mục bổ sung nào không được gửi cùng với biểu mẫu.IE không gửi; các yếu tố hình thức được thêm động; đây có phải là lỗi của IE không?
Dài câu chuyện ngắn ... rất nhiều đơn giản hóa, gỡ lỗi, đã tìm ra dòng nào đang kích hoạt IE để bỏ qua đầu vào biểu mẫu mới. Vì vậy, vấn đề hành vi được giải quyết.
Nhưng bây giờ tôi phải hỏi: Tại sao? Đây có phải là lỗi của IE không?
Đây là mã đơn giản:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function add() {
div = document.getElementById("mylist");
// *** Adding text here works perfectly fine. ***
div.innerHTML += " ";
e = document.createElement("input");
e.setAttribute("type", "text");
e.setAttribute("name", "field3");
e.setAttribute("value", "--NEWVALUE--");
div.appendChild(e);
// *** Adding text here works perfectly fine in Firefox, but for
// Internet Explorer it causes field3 to not be submitted. ***
//div.innerHTML += " ";
}
</script>
</head>
<body>
<form action="" method="get">
<div id="mylist">
<input type="text" name="field1" value="value1" />
<input type="text" name="field2" value="value2" />
</div>
<a href="javascript:" onclick="add()" />Add</a>
<input type="submit" value="Submit" />
</form>
</body>
</html>
Để thử nó ra, làm rõ ràng: tải trong IE, bấm Add, nhấn Submit, nhìn những gì trong thanh địa chỉ. Nếu bạn bỏ ghi chú dòng cuối cùng trong add()
, IE sẽ đột ngột ngừng báo cáo field3
. Nó hoạt động tốt trong Firefox.
Bất kỳ ý tưởng nào? Một tâm trí tò mò muốn biết. (Và làm cách nào để thêm văn bản vào đó nếu cần, theo kiểu di động, vì vậy IE rất vui?)
1 về tránh setAttribute. -1 trên cuộc gọi createElement-with-markup, đây là một bản hack chỉ gây khó chịu cho IE. – bobince
Tôi đồng ý về việc đó là một hack - đó là lý do tại sao tôi đề xuất áp phích thử thiết lập các thuộc tính trước tiên. Nếu điều đó không hiệu quả, tôi không thấy cách nào khác để làm những gì anh ta muốn xảy ra. – levik