포함 형식의 입력을 얻는 방법은 무엇입니까?


106

해당 INPUT에 대한 참조 만있는 경우 INPUT의 FORM 상위에 대한 참조를 가져와야합니다. 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입력 필드 의 속성은 jQuery가 보장하는 훨씬 더 많은 브라우저 인 IE 4.0+, Firefox 1.0+, Opera 9.0+에서 지원되므로이를 고수해야합니다.

이것이 다른 유형의 요소 (아님 <input>) 인 경우 다음을 사용하여 가장 가까운 부모를 찾을 수 있습니다 closest.

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

또한의 form속성 에 대한이 MDN 링크를 참조하십시오 HTMLInputElement.


알겠습니다 .. 양식 속성에 대해. 나는 그것을 시도했고 그것도 작동합니다. 그러나 이것은 당신이 말하는 브라우저에서 지원되지 않습니까?
Ropstah

나는 그것이 확실합니다. 100 % 확신 할 수 없어서 약속하고 싶지 않습니다. 지금 조사 중입니다 ...
Paolo Bergantino

5
element.form 사용-jQuery보다 더 많은 브라우저에서 작동합니다. 또한 하나의 속성 참조이므로 가장 가까운 ()으로 DOM 트리를 탐색하는 것보다 약 천 배 더 효율적입니다.
NickFitz

1
나는 동의한다. 내가 말했듯이 처음에는 form 속성이 모든 일반적인 브라우저에서 광범위하게 구현되었는지 확실하지 않았습니다. 나는 이것이 다른 유형의 요소라면 가장 가까운 곳을 떠날 때 더 나은 옵션으로 더 명시 적으로 나열하기 위해 내 대답을 편집했습니다.
Paolo Bergantino

선택과 같은 다른 입력 유형에서도 작동하는 것 같습니다. 알아 둘만 한.
Falk

42

모든 입력에는 form입력이 속한 형식을 가리키는 속성이 있으므로 간단히 :

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

4

나는 약간의 jQuery와 오래된 스타일의 자바 스크립트를 사용합니다.

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

이것은 요소를 포함하는 양식에 대한 완전한 참조입니다.


3
기본적으로 "이것을 jQuery 객체로 만든 다음 jQuery 객체가 아닌 것으로 만드십시오"라고 말하는 것입니다.
isherwood

1
이런, 그냥 하는게 $(this.form)어때?
안드레 피게 이레도

3

사용 jQuery :

function doSomething(element) {
    var form = $(element).closest("form").get().
    //do something with the form.
}

2

jQuery를 사용하고 모든 양식 요소에 대한 핸들이있는 경우 .form을 사용하기 전에 요소를 get (0)해야합니다.

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를 지원 합니다. 즉, 양식 ID를 직접 전달해야합니다.


2

내가 사용하는 데 필요한 element.attr('form')대신 element.form.

Fedora 12에서 Firefox를 사용합니다.



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

이 자바 스크립트 함수의 예는 이벤트 리스너가 형식을 식별하기 위해 호출합니다.

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.