jQuery ค้นหาฟอร์มหลัก


219

ฉันมี html นี้

<ul>
    <li><form action="#" name="formName"></li>
    <li><input type="text" name="someName" /></li>
    <li><input type="text" name="someOtherName" /></li>
    <li><input type="submit" name="submitButton" value="send"></li>
    <li></form></li>
</ul>

ฉันจะเลือกแบบฟอร์มที่input[name="submitButton"]เป็นส่วนหนึ่งได้อย่างไร (เมื่อฉันคลิกที่ปุ่มส่งฉันต้องการเลือกแบบฟอร์มและผนวกบางฟิลด์ในนั้น)

คำตอบ:


486

ฉันขอแนะนำให้ใช้closestซึ่งเลือกองค์ประกอบหลักที่ใกล้เคียงที่สุด:

$('input[name="submitButton"]').closest("form");

แทนที่จะกรองตามชื่อฉันจะทำสิ่งนี้:

$('input[type=submit]').closest("form");

2
เราอาจจะเพิ่มการรับโดยดัชนี? '$ ( "ป้อนข้อมูล [type = ส่ง]") ที่ใกล้เคียงที่สุด ( "รูปแบบ");. ส่งกลับอาร์เรย์ของรูปแบบ
sergzach

ฉันกำลังพยายามใช้งานด้านบนด้วยวิธีนี้: $ (". แต่ละ img"). คลิก (ฟังก์ชั่น () {$ (นี้) .closest ("แบบฟอร์ม"). show ();}); แต่ฉันไม่สามารถทำให้มันใช้งานได้ : /
Alisso

2
คำตอบ peterjwest ดีกว่าอันนี้
กาการีน

ใน HTML5 มีแอตทริบิวต์ 'ฟอร์ม' ใหม่ที่ช่วยให้คุณมีองค์ประกอบนอกฟอร์มหลัก ควรตรวจสอบสิ่งนี้ก่อน
mcintyre321

56

คุณสามารถใช้การอ้างอิงแบบฟอร์มที่มีอยู่ในอินพุตทั้งหมดซึ่งเร็วกว่ามาก (เร็วกว่า.closest()5-10 เท่าใน Chrome และ IE8) ทำงานบน IE6 และ 7 ด้วย

var input = $('input[type=submit]');
var form = input.length > 0 ? $(input[0].form) : $();

2
คุณพูดถึง IE8 ใช้ได้กับรุ่น 6, 7 และ 9 หรือไม่
ซันนี่

1
นี่เป็นสิ่งที่ดีกว่าและเร็วกว่าที่ @peterjwest พูดถึง Re IE6 ฉันคิดว่า. form กับองค์ประกอบการป้อนข้อมูลอยู่บน IE4 แต่น่าเสียดายที่หน้า netscape dev หายไปแล้ว ... และใครจะตรวจสอบ mozilla
Maciej Łopaciński

นี่เป็นวิธีที่ปลอดภัยกว่าแทนที่จะใช้closest()เนื่องจากอินพุตอาจมีการกำหนดฟอร์มเอง: codepen.io/anon/pen/vNqEyg
Möhre

คุณอาจใช้การจดชวเลขถ้าสัญกรณ์เพื่อให้รหัสของคุณสั้น แต่ในตัวอย่างนี้มันเบี่ยงเบนจากรหัสจริงที่คุณต้องการแสดง (โดยเฉพาะอย่างยิ่งสำหรับคนที่ไม่คุ้นเคยกับการจดชวเลข) ฉันจะชอบการใช้งานปกติถ้า ()
AeonOfTime

ฉันจะบอกว่ามีความยุ่งเหยิงมากเกินไปกับการแก้ปัญหาที่ หากคุณไปกับสิ่งนี้ (โซลูชันของฉันด้านล่าง - ใช่นี่คือโฆษณา :)): stackoverflow.com/a/18921404/261332ดังนั้นคุณไม่จำเป็นต้องมีปัญหาแทรกซ้อนเนื่องจากมันจะทำงานเมื่อมันควรจะและ ไม่ทำอะไรเลย
userfuser

17

สำหรับฉันดูเหมือนว่าง่ายที่สุด / เร็วที่สุด:

$('form input[type=submit]').click(function() { // attach the listener to your button
   var yourWantedObjectIsHere = $(this.form);   // use the native JS object with `this`
});

2
สำหรับฉันแล้วการใช้$(this.form)เป็นทางออกที่ดีที่สุด
jap1968

2

ในฐานะที่เป็นเบราว์เซอร์ HTML5 หนึ่งสามารถใช้inputElement.form- ค่าของแอตทริบิวต์จะต้องเป็น ID ของ<form>องค์ประกอบในเอกสารเดียวกัน ข้อมูลเพิ่มเติมเกี่ยวกับMDN


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