如何从元素中找到父表单?

时间:2010-08-30 19:18:16

标签: jquery

我正在尝试使用以下代码从元素中找到父表单:

<form id="f1" action="action1.html">
form1 <button id="btn1" onclick="testaction(this); return false;" >test form 1</button>
</form>


<script type="text/javascript" >
function testaction(element) {
    var e = $(element.id);
    var form = e.parent('form');

    alert(form.id); // undefined!!
    alert(form.action); // undefined!!
    alert(document.forms[0].action); //http://localhost/action1.html
}
</script>

应该是非常简单的事情......提前致谢

6 个答案:

答案 0 :(得分:40)

http://api.jquery.com/closest/会这样做。像这样使用

$('#elem').closest('form');

答案 1 :(得分:12)

您遇到的问题是form是一个jQuery对象,而不是一个DOM对象。如果您希望它是表单对象,您可以e.parent('form').get(0)

此外,你正在错误地处理元素 - jQuery采用#id形式的id选择器,但你已经传递了它id

这是一个有效的版本:

function testaction(element) {
  var e = $(element);//element not element.id
  var form = e.parent('form').get(0);//.get(0) added

  alert(form.id); // undefined!!
  alert(form.action); // undefined!!
  alert(document.forms[0].action); //http://localhost/action1.html
}

请参阅此操作:http://jsfiddle.net/BTmwq/

编辑:拼写,清晰度

答案 2 :(得分:8)

Button元素具有表单属性http://www.w3schools.com/jsref/dom_obj_pushbutton.asp

buttonElement.form

答案 3 :(得分:6)

将内联事件处理程序抛出,并在此保持不引人注目。

$(document).ready(function(){
   $('#btn1').bind('click', function(){
      var form = $(this).closest('form')[0];

      alert(form.id); // defined
      alert(form.action); // defined
   });
});

参考:.closest().bind()

答案 4 :(得分:0)

$(".whatever").parents("form");

答案 5 :(得分:0)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="f1" action="action1.html">
form1 <button id="btn1" onclick="get_attr(this); return false;" >test form 1</button>
</form>

<form id="f2" action="action2.html">
form2 <button type="submit" >test form 2</button>
</form>

<script>

$('button[type="submit"]').click(function(e) {
    var form = $(this).parent("form").get(0);
    alert("ID: " + form.id);
    alert("Action: " + form.action);
    e.preventDefault();
});
function get_attr(element) {
    var form = $(element).parent("form").get(0);
    alert("ID: " + form.id);
    alert("Action: " + form.action);
}

</script>

Demo