如何获取输入的包含形式?

IT技术 javascript jquery forms input
2021-02-03 14:55:58

当我只有对 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"));
6个回答

作为输入的原生 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'));

另外,请参阅有关以下form属性的MDN 链接HTMLInputElement

使用 element.form - 它可以在比 jQuery 更多的浏览器上工作。它也是一个属性引用,因此比使用最接近的()在 DOM 树上走高大约一千倍。
2021-03-14 14:55:58
我同意。正如我所说,我一开始并不确定是否在所有常见浏览器中广泛实现了表单属性。我已经编辑了我的答案,以更明确地将其列为更好的选择,而如果这是不同类型的元素,我将最接近作为花絮。
2021-03-17 14:55:58
它似乎也适用于其他输入类型,如 select。很高兴知道。
2021-03-19 14:55:58
好的,这有效.. 关于表单属性。我刚刚试过了,这也有效。但这在您说的浏览器中不受支持?
2021-03-24 14:55:58
我很确定它是。我只是不是 100% 确定,所以我不想Promise任何事情。我现在正在研究...
2021-04-12 14:55:58

每个输入都有一个form属性指向输入所属的表单,所以简单:

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

我使用了一些 jQuery 和旧式 javascript - 更少的代码

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

这是对包含元素的表单的完整引用

您基本上是在说“使其成为 jQuery 对象,然后使其不是 jQuery 对象”。
2021-04-01 14:55:58
oop,为什么不只是做$(this.form)
2021-04-02 14:55:58

使用jQuery

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

如果使用 jQuery 并且有任何表单元素的句柄,则需要在使用 .form 之前 get(0) 该元素

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