jQuery form serialize - สตริงว่าง


100

html ของฉัน:

 <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" />

เมื่อฉันเริ่มเหตุการณ์คลิก formData ว่างเปล่า ฉันใช้ jQuery 1.4.2

คำตอบ:


217

คุณต้องinputตั้งชื่อองค์ประกอบ เช่น:

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

foo=2จะทำให้คุณในกล่องเตือน

.serialize()name1=value1&name2=value2ใช้ชื่อและค่าของเขตข้อมูลแบบฟอร์มและสร้างสตริงเหมือน หากไม่มีชื่อก็ไม่สามารถสร้างสตริงดังกล่าวได้

ทราบว่าเป็นสิ่งที่แตกต่างname idแบบฟอร์มของคุณจะใช้งานไม่ได้เช่นกันหากคุณใช้แบบ "ปกติ" ทุกฟิลด์แบบฟอร์มต้องการชื่อ


1
รหัสจำเป็นสำหรับการทำให้เป็นอนุกรม btw หรือไม่?
วิก

ให้ฉันแนะนำให้รวมคำตอบของ Madbreaks ไว้ที่นี่ด้วย
Slavic

ฉันมีชื่อ แต่ฉันยังมีสตริงว่างเมื่อทำให้มุมมองของฉันเป็นชุดดังนั้นชื่อจึงเป็นเช่น [0] .Unit, [0] .Currency
Marc Roussel

คำตอบด้านล่างช่วยฉัน ... ตรวจสอบให้แน่ใจว่าปัจจัยการผลิตของคุณไม่ถูกปิดใช้งาน!
soundstripe

84

แม้ว่าจะใช้ไม่ได้กับตัวอย่างนี้ แต่ลักษณะการทำงานเดียวกันนี้จะเกิดขึ้นหากอินพุตฟอร์มอย่างน้อยหนึ่งdisabledรายการ อินพุตเหล่านั้นจะไม่ปรากฏในสตริงที่ทำให้เป็นอนุกรม ในกรณีของฉันอินพุตแบบฟอร์มทั้งหมดมีค่า แต่ถูกปิดใช้งานส่งผลให้สตริงว่างถูกส่งคืน


4
นั่นเป็นสิ่งที่น่ารังเกียจ ต้องการปิดการใช้งานฟิลด์ในขณะที่ฉันส่งอีเมลแบบ ajax และทำก่อนที่จะทำให้แบบฟอร์มเป็นอนุกรม ...
Daniel Lang

1
โอ้ฉันนี่เป็นปัญหาที่ทำให้ฉันบ้า +1 ชายวิธีใดที่จะทำให้มันทำงานกับองค์ประกอบที่ปิดใช้งาน
Noitidart

@Noitidart คุณสามารถเขียนserializeส่วนขยาย jQuery ของคุณเองซึ่งจะวนซ้ำผ่านอินพุตและรวมถึงส่วนที่ปิดใช้งาน แต่ไม่มีทางทำได้เท่าที่ฉันรู้โดยใช้ jQuery แบบสำเร็จรูป
Madbreaks

มันสมเหตุสมผลที่จะไม่รวมองค์ประกอบที่ปิดใช้งานเนื่องจากองค์ประกอบที่ปิดใช้งานไม่ควรมีอินพุตของผู้ใช้
Jenny O'Reilly

2
@ JennyO'Reilly แน่นอน แต่ไม่มีข้อมูลผู้ใช้ไม่ได้หมายความว่า "ไม่มีค่า"
Madbreaks

10

ไม่มีnameแอตทริบิวต์ในอินพุต ... ที่อาจเป็นปัญหาสำหรับการทำให้เป็นอนุกรม

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

ชาย. คุณเป็นผู้ช่วยชีวิต !! ขอบคุณ.
Anjana Silva

6

ตรวจสอบให้แน่ใจว่าไม่มี 2 องค์ประกอบที่มีรหัสเดียวกันบนหน้า


3
นี่คือความคิดเห็นไม่ใช่คำตอบสำหรับคำถาม โปรดใช้ความคิดเห็นในอนาคต ขอบคุณ :)
Gone Coding
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.