จะรับรูปแบบการป้อนข้อมูลได้อย่างไร?


107

ฉันต้องการได้รับการอ้างอิงถึงแม่แบบฟอร์มของ INPUT เมื่อฉันมีการอ้างอิงถึง INPUT นั้นเท่านั้น เป็นไปได้ด้วย JavaScript หรือไม่? ใช้ jQuery ถ้าคุณต้องการ

function doSomething(element) {
    //element is input object
    //how to get reference to form?
}

สิ่งนี้ใช้ไม่ได้:

var form = $(element).parents('form:first');

alert($(form).attr("name"));

คำตอบ:


185

องค์ประกอบ DOM ดั้งเดิมที่เป็นอินพุตยังมีformแอตทริบิวต์ที่ชี้ไปยังรูปแบบที่เป็นของ:

var form = element.form;
alert($(form).attr('name'));

ตามที่w3schoolsที่.formทรัพย์สินของช่องใส่ได้รับการสนับสนุนโดย IE 4.0+, Firefox 1.0+, Opera 9.0 ขึ้นไปซึ่งเป็นเบราว์เซอร์มากขึ้นว่าการค้ำประกัน jQuery ดังนั้นคุณควรจะติดนี้

หากนี่เป็นองค์ประกอบประเภทอื่น (ไม่ใช่<input>) คุณสามารถค้นหาพาเรนต์ที่ใกล้เคียงที่สุดได้ด้วยclosest:

var $form = $(element).closest('form');
alert($form.attr('name'));

นอกจากนี้โปรดดูลิงก์ MDN เกี่ยวกับformคุณสมบัติของHTMLInputElement:


ใช้ได้เลย .. เกี่ยวกับแอตทริบิวต์แบบฟอร์ม ฉันเพิ่งลองใช้และได้ผลเช่นกัน แต่สิ่งนี้ไม่รองรับในเบราว์เซอร์ที่คุณกำลังพูด?
Ropstah

ฉันค่อนข้างมั่นใจว่าเป็นอย่างนั้น ฉันไม่แน่ใจ 100% ดังนั้นฉันจึงไม่ต้องการที่จะสัญญาอะไร ฉันกำลังดูอยู่ตอนนี้ ...
Paolo Bergantino

5
ใช้ element.form - มันจะทำงานบนเบราว์เซอร์มากกว่าที่ jQuery ทำ นอกจากนี้ยังมีการอ้างอิงคุณสมบัติอย่างหนึ่งด้วยดังนั้นจะมีประสิทธิภาพมากกว่าการเดินขึ้นต้นไม้ DOM ที่ใกล้เคียงที่สุด () ประมาณหนึ่งพันเท่า
NickFitz

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

ดูเหมือนว่าจะใช้ได้กับประเภทอินพุตอื่น ๆ เช่นเลือก ดีแล้วที่รู้.
Falk

43

ทุกอินพุตมีformคุณสมบัติที่ชี้ไปยังรูปแบบที่อินพุตเป็นของดังนั้นเพียงแค่:

function doSomething(element) {
  var form = element.form;
}

4

ฉันใช้ jQuery และ javascript แบบเก่านิดหน่อย - โค้ดน้อยกว่า

$($(this)[0].form) 

นี่เป็นการอ้างอิงที่สมบูรณ์ไปยังแบบฟอร์มที่มีองค์ประกอบ


3
โดยพื้นฐานแล้วคุณกำลังพูดว่า "ทำให้สิ่งนี้เป็นวัตถุ jQuery แล้วทำให้มันไม่ใช่วัตถุ jQuery"
isherwood

1
geez ทำไมไม่ทำ$(this.form)ล่ะ?
Andre Figueiredo


2

หากใช้ jQuery และมีจุดจับสำหรับองค์ประกอบฟอร์มใด ๆ คุณต้องได้รับ (0) องค์ประกอบก่อนที่จะใช้. form

var my_form = $('input[name=first_name]').get(0).form;

2
function doSomething(element) {
  var form = element.form;
}

และใน html คุณต้องหาองค์ประกอบนั้นและเพิ่มแอตทริบิวต์ "form" เพื่อเชื่อมต่อกับแบบฟอร์มนั้นโปรดดูที่http://www.w3schools.com/tags/att_input_form.asp แต่รูปแบบนี้ attr ไม่ได้ สนับสนุน IEกล่าวคือคุณต้องส่งรหัสแบบฟอร์มโดยตรง




0

และอีกหนึ่ง ....

var _e = $(e.target); // e being the event triggered
var element = _e.parent(); // the element the event was triggered on
console.log("_E " + element.context); // [object HTMLInputElement]
console.log("_E FORM " + element.context.form); // [object HTMLFormElement]
console.log("_E FORM " + element.context.form.id); // form id

0

ตัวอย่างของฟังก์ชัน Javascript นี้ถูกเรียกโดยตัวฟังเหตุการณ์เพื่อระบุฟอร์ม

function submitUpdate(event) {
    trigger_field = document.getElementById(event.target.id);
    trigger_form = trigger_field.form;

-2

จะได้ผลไหม (เว้นว่างการดำเนินการส่งแบบฟอร์มกลับไปเองด้วยใช่ไหม)

<form action="">
<select name="memberid" onchange="this.form.submit();">
<option value="1">member 1</option>
<option value="2">member 2</option>
</select>

"this" จะเป็นองค์ประกอบที่เลือกโดย. form จะเป็นรูปแบบหลักของมัน ขวา?

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