jQuery form serialize - chuỗi rỗng


94

Html của tôi:

 <script type="text/javascript">

    $(function() {

        $("#bt1").click(function() {

            var f = $("#form1");
            var formData = f.serialize();

            alert(formData);
        });

    }); 
</script> 

 <div id="div1">
      <form id="form1" action="/Home/Test1" method="post" name="down">
        <div id="div2">
            <input id="input1" type="text" value="2" />
        </div>    
      </form>
  </div>

 <input type="submit" id="bt1" />

Khi tôi kích hoạt sự kiện nhấp chuột, dữ liệu biểu mẫu trống. Tôi đang sử dụng jQuery 1.4.2.

Câu trả lời:


213

Bạn phải inputđặt tên cho phần tử. Ví dụ:

<form id="form1" action="/Home/Test1" method="post" name="down">
    <div id="div2">
        <input id="input1" type="text" value="2" name="foo"/>
    </div>    
</form>

sẽ cung cấp cho bạn trong hộp cảnh báo foo=2.

.serialize()lấy tên và giá trị của các trường biểu mẫu và tạo một chuỗi giống như name1=value1&name2=value2. Không có tên nó không thể tạo ra một chuỗi như vậy.

Lưu ý rằng đó namelà một cái gì đó khác với id. Biểu mẫu của bạn cũng sẽ không hoạt động nếu bạn sử dụng nó theo cách "bình thường". Mọi trường biểu mẫu cần một tên.


1
id có cần thiết cho biểu mẫu serialize btw không?
Vic

Hãy để tôi đề nghị đưa câu trả lời của Madbreaks vào đây.
Slavic

Tôi có tên nhưng tôi vẫn có chuỗi trống khi tuần tự hóa chế độ xem của tôi là một bộ sưu tập, vì vậy, các tên đó là [0] .Unit, [0] .Currency
Marc Roussel

Câu trả lời dưới đây đã giúp tôi ... đảm bảo rằng đầu vào của bạn không bị TẮT!
soundstripe

82

Mặc dù nó không áp dụng cho ví dụ cụ thể này, hành vi tương tự cũng xảy ra nếu một hoặc nhiều đầu vào biểu mẫu disabled. Các đầu vào đó sẽ không hiển thị trong chuỗi được tuần tự hóa. Trong trường hợp của tôi, tất cả các đầu vào biểu mẫu đều có giá trị nhưng đã bị vô hiệu hóa, dẫn đến một chuỗi trống được trả về.


4
Đó là một điều khó chịu. Muốn vô hiệu hóa các lĩnh vực trong khi tôi đang gửi mail ajax-phong cách và đã làm nó trước khi serializing hình thức ...
Daniel Lang

1
Ôi trời ơi, đây là một vấn đề khiến tôi phát điên. +1 người đàn ông, có cách nào để làm cho nó hoạt động trên các phần tử bị khuyết tật không?
Noitidart

@Noitidart Bạn có thể viết serializetiện ích mở rộng jQuery của riêng mình để lặp lại các đầu vào và bao gồm các phần mở rộng bị tắt. Nhưng không có cách nào để làm điều đó, theo như tôi biết, sử dụng jQuery có sẵn.
Madbreaks

Tốt nhất là không bao gồm các phần tử bị vô hiệu hóa, vì các phần tử bị vô hiệu hóa không được chứa đầu vào của người dùng.
Jenny O'Reilly

2
@ JennyO'Reilly Chắc chắn, nhưng không chứa đầu vào của người dùng không có nghĩa là "không có giá trị".
Madbreaks

10

Không có namethuộc tính nào trong đầu vào ... đó có thể là vấn đề khi tuần tự hóa.

<input id="input1" type="text" value="2" name="input1" />

Đàn ông. Bạn đúng là một vị cứu tinh !! Cảm ơn bạn.
Anjana Silva

6

Đồng thời đảm bảo rằng không có 2 phần tử có cùng id trên trang.


3
Đây là một bình luận, không phải là một câu trả lời cho câu hỏi. Vui lòng sử dụng ý kiến ​​trong tương lai. Cảm ơn :)
Gone Coding
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.