<form method="POST" action="" id ="formaclient" >
<input name="fullname">
<input name="fullname1">
<input name="fullname2">
<input name="fullname3">
<input class="btn-update">
</form>
$(".btn-update").click(function (ev) {
ev.preventDefault();
var data = $(this).find("#formaclient").serialize();
console.log(data);
$.ajax({
type: 'POST',
url: 'demo/client_view_search_content.php',
data: $("#formaclient").serialize(),
success: function () {
alert('Success!')
},
error: function () {
alert('Failure!')
}
});
return false;
});
出了点问题
var data = $(this).find("#formaclient").serialize();
我没有获取数据,如何更改var data = $(this).find("#formaclient").serialize();
我将从表单中获取数据?
答案 0 :(得分:1)
使用closest()
代替find()
。 find()将仅检查孩子。虽然closest()
会检查父母
var data = $(this).closest("#formaclient").serialize();
由于id是唯一的,您可以直接获取这样的表单,
var data = $("#formaclient").serialize();
如果您有多个表单,请像这样使用
var data = $(this).closest("form").serialize();
答案 1 :(得分:1)
我认为您使用.find()
错误,因为.find()
搜索元素后代(子)。
我认为您应该使用$("form#formaclient").serialize()
来序列化数据。
答案 2 :(得分:1)
您正在使用指向 .btn-update 对象的 this 。使用.find()只会检查对象的子节点。使用下面的序列化数据:
var data = $("#formaclient").serialize();
答案 3 :(得分:1)
.find()
从当前元素开始。显然,由于按钮中没有元素,您将无法找到该表单。
由于您拥有表单的id
,为什么不用它来查找表单?
$('#formaclient').serialize();
会做到这一点。
另外,请记住所有ID都必须是唯一的,因此您不必担心混合表单。
答案 4 :(得分:0)
您不需要具有特定id值的find
元素 - 简单的$('#formaclient')就可以了。它还可以避免像目前代码尝试那样将表单数据序列化两次。
您的最终结果应如下所示:
$(".btn-update").click(function(ev) {
ev.preventDefault();
var myData = $('#formaclient').serialize();
console.log(myData);
$.ajax({
type: 'POST',
url: 'demo/client_view_search_content.php',
data: myData,
success: function () {
alert('Success!')
},
error: function () {
alert('Failure!')
}
});
return false;
});
正如其他人所指出的那样,尝试find
一个元素只会搜索你开始的元素(你的情况下的按钮)中的后代元素。