Dưới đây là một solu thay thế tion giả sử jQuery có sẵn. Nếu bạn sử dụng một thư viện tiện ích js khác với jQuery, hoặc không có thư viện nào cả, điều này vẫn có thể thực hiện được. Nó chỉ liên kết một hàm với sự kiện onchange của lựa chọn và phân tích cú pháp json từ một thuộc tính data-custom.
<form>
<select name="AnySelect">
<option value="primary-value0" data-support='["test",128,2014,"blackberry"]' />
<option value="primary-value1" data-support='["test1",39,2013,"apricot"]' />
<option value="primary-value2" data-support='["test2",42,2012,"peach"]' />
<option value="primary-value3" data-support='[null,null]' />
<option value="primary-value4" data-support='[30,28,null]' />
</select>
.
.
.
<span style="visibility: hidden" id="Support_AnySelect-container"><span>
</form>
^ Markup ------- Javascript v
//bind onchange once document is loaded and ready
$.ready(function(){ $('#TheSelector').on('change',UpdateHidden); });
function UpdateHidden(event)
{
//Create a base name for grouping dynamic values; ex: Support_AnySelect
Name='Support_'+SelectField.attr('name');
//Check if container was made for us already
Contain=$(this.parent).find('#'+Name+'-container');
if(Container.length===0) //make the container if missing
{
$(this).after('<span id="'+Name+'-container" style="visibility: none;"></span>');
Contain=$(this.parent).children('#'+Name+'-container');
}
//get our special multi-values, jQuery will auto decode the JSON
SupportValues = this.data('support');
Contain.empty(); //get rid of last select options
$.each(SupportValues,function(i,val)
{
Contain.append('<input type="hidden" name="'+Name+'['+i+'] value="'+val+'"/>');
});
}
lợi ích chính của việc này là nó nên, về mặt lý thuyết, cho phép bạn gửi một 'số lượng biến của các biến 'từ biểu mẫu. Bạn cũng có thể điều chỉnh tập lệnh để tính toán các đối tượng lồng nhau nhất định. Miễn là bạn chuyển JSON hợp lệ đến thuộc tính dữ liệu mà bạn chọn.
Nếu có ai đó cố gắng làm điều này trước khi tôi làm, vui lòng cho tôi biết. Tôi sẽ kiểm tra điều này sau nhưng có thể có một số lỗi nhỏ. Bạn sẽ có thể sử dụng điều này trên bất kỳ phần tử chọn nào và có các đầu vào ẩn tự động điền vào bên trong một phần tử khác; tập lệnh cũng phải đảm bảo chúng nằm trong cùng một thẻ biểu mẫu cho bạn và có tên duy nhất nhưng được nhóm lại qua mảng HTTP.
Nguồn
2014-03-31 16:11:24
Làm rõ. Đưa ra một ví dụ về những gì bạn muốn. – EFraim
Hãy làm rõ những gì bạn muốn –
Tôi đã làm rõ câu hỏi của mình. Rất tiếc, các yếu tố mã HTML được định dạng không chính xác đã không được hiển thị trước đây. Cảm ơn –