我正在尝试使用以下代码从元素中找到父表单:
<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>
应该是非常简单的事情......提前致谢
答案 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
});
});
答案 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>