Như tiêu đề cho biết, điều tôi đang cố làm là để jQuery thêm một số trường bổ sung dựa trên giá trị được chọn trong danh sách thả xuống xuống hộp. Ví dụ: khi trang tải, trình đơn thả xuống có giá trị mặc định là 1 và trường mặc định được hiển thị. Bây giờ, nếu người dùng chọn một giá trị khác trong trình đơn thả xuống đó, số lượng các trường cần được điều chỉnh cho phù hợp, thông qua nhân bản (tôi cho rằng đây sẽ là giải pháp tốt nhất). Dưới đây là những gì tôi có cho đến nay:Sử dụng jQuery để tự động thêm các trường biểu mẫu (hoặc các trường) dựa trên giá trị hộp thả xuống
thả xuống mã hộp ...
<select id="itemCount" name="itemCount">
<option value="1">1 item</option>
<option value="2">2 items</option>
<option value="3">3 items</option>
<option value="4">4 items</option>
<option value="5">5 items</option>
<option value="6">6 items</option>
</select>
... jQuery thay đổi người nghe ...
$(document).ready(function() {
$("#itemCount").change(function(){
var itemCountVal = jQuery(this).val();
$("#item_dup_1").fieldsManage(itemCountVal);
});
});
... và chức năng riêng của mình (nó thực sự dựa trên một plugin jQuery mà tôi nghĩ là một điểm khởi đầu tốt cho những gì tôi cần):
jQuery.fn.fieldsManage = function (number) {
var clone,
objTemplate = source.clone(true),
source = jQuery(this),
maxClones = number - 1,
clones = [];
if (clones.length < maxClones) {
while (clones.length < maxClones) {
clone = objTemplate.clone(true).insertAfter(clones[clones.length - 1] || source);
clones.push(clone);
}
}
if (clones.length > maxClones) {
// Fieldsets removal function goes here.
}
}
Đối tượng đang được c được gọi là <fieldset id="item_dup_1"><input><input><input></fieldset>
. Tôi không nghĩ rằng nó là cần thiết để hiển thị mã đầy đủ cho nó là tốt.
Điều này hoạt động như một sự quyến rũ cho thay đổi đầu tiên, nhưng nếu người dùng thay đổi lại giá trị, đó là khi mọi thứ xảy ra sai và thay vì hiển thị số lượng trường chính xác, nó sẽ hiển thị nhiều hơn. Có vẻ như nó đang tính toán số lượng các trường cần thiết bắt đầu từ đầu, bỏ qua thực tế là các fieldets đã được thêm vào, và đây thực sự là vấn đề của tôi. Tôi cũng có một chức năng (không được hiển thị ở đây chỉ để giữ cho câu hỏi rõ ràng và càng ngắn càng tốt) mà asigns ID mới cho fieldset nhân bản để ngăn chặn ID trùng lặp và hoạt động mà không có một xô.
Tôi tin rằng tôi đang làm điều gì đó sai, nhưng tôi đã đập đầu vào tường với hai ngày nay, cố gắng tìm thấy nó là gì không có may mắn như vậy, bất kỳ trợ giúp sẽ được đánh giá cao hơn !
Cảm ơn trước!
Rực rỡ, hoạt động như một sự quyến rũ! Đó là loại những gì tôi đã có trong tâm trí nhưng đã bị mắc kẹt trên đường đi. Cảm ơn bạn, nhiều đánh giá cao. –
Có lẽ đây là kiến thức phổ biến, nhưng tôi thấy rằng nếu dữ liệu đã được nhập vào các trường nhập của fieldset đang được nhân bản trước khi thay đổi số fieldset thì dữ liệu được nhập cũng sẽ được nhân bản. Thực hiện một clone.find đơn giản ("input") mỗi (function() {jQuery (this) .val ("")}); sau khi bản sao đã được tạo ra sẽ cung cấp cho bạn một bản sao sạch để làm việc. Hy vọng điều này sẽ tha cho ai đó một vài phút. –
Vâng, đây là kiến thức ít nhiều phổ biến và cũng là cách mà 'clone' được cho là hoạt động. Phương thức 'clone' của jQuery sử dụng nội bộ phương thức DOM bình thường' cloneNode (true) '. Kiểm tra ở đây để có một mô tả về cách nó hoạt động http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-3A0ED0A4 – jitter