Javascript jQuery-如何在对表单进行Ajaxing时获取submit类型输入的值
假设我有以下代码:Javascript jQuery-如何在对表单进行Ajaxing时获取submit类型输入的值,javascript,jquery,html,ajax,dom,Javascript,Jquery,Html,Ajax,Dom,假设我有以下代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" > <html lang="en"> <head> <title><!-- Insert your title here --></title> <script src="http://aj
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"
>
<html lang="en">
<head>
<title><!-- Insert your title here --></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#form1').submit(function(){
// Let's see the values
alert($(this).serialize());
$.post($(this).attr('action'), $(this).serialize(), function(data){
// Do something on callback
});
return false;
})
});
</script>
</head>
<body>
<form action="http://example.com/bla" method="POST" id="form1">
<input type="hidden" name="ipt1" value="1"/>
<input type="submit" name="sbt" value="2"/>
</form>
</body>
</html>
$(文档).ready(函数(){
$('#form1')。提交(函数(){
//让我们看看这些值
警报($(this.serialize());
$.post($(this.attr('action'),$(this.serialize()),函数(数据){
//回拨时做些什么
});
返回false;
})
});
当我序列化表单的值时,输入类型submitclicked的值不存在。当我调整表单时,如何处理这种情况?这是出于设计。
.serialize()
方法不会序列化类型为submit
的输入
不幸的是,按照您的方式,您将无法访问事件的源。您最好将所有提交连接起来,然后像下面这样附加源数据:
$('input:submit').bind('click', function(){
var data = $("#form1").serialize();
data += "&"+escape($(this).attr("name"))+"="+escape($(this).val());
alert(data);
$.post($('#form1').attr('action'), data, function(data) {
//do something
});
return false;
});
$("#submit_button").click(function() {
var data = $("#my_form").serialize();
data += data.length ? "&" : ""; // check if empty
data += escape($(this).attr("name"))+"="+escape($(this).val());
// ...
return false;
});
在非ajax表单中,只有单击表单时,提交按钮的值才会随表单一起发送。因此,如果你想用ajax模仿这种行为,你必须这样做:
$('input:submit').bind('click', function(){
var data = $("#form1").serialize();
data += "&"+escape($(this).attr("name"))+"="+escape($(this).val());
alert(data);
$.post($('#form1').attr('action'), data, function(data) {
//do something
});
return false;
});
$("#submit_button").click(function() {
var data = $("#my_form").serialize();
data += data.length ? "&" : ""; // check if empty
data += escape($(this).attr("name"))+"="+escape($(this).val());
// ...
return false;
});
这会将提交按钮的序列化数据附加到序列化表单数据。我使用以下解决方案:
<input type="radio" name="action" value="action_1" style="display:none"></input>
<button type="submit" onclick="this.previousElementSibling.checked=true" >Do Action 1</button>
执行行动1
您可以对任意数量的选项(名称、值)重复此操作,并且只要选择一个选项,表单就会提交。
确保页面在使用后重新加载。有没有更好的方法来完成这项工作,而不是处理所有提交类型输入的所有点击,将它们的值附加到表单中?这种方法的问题是,我的表单上有很多提交类型的输入。你是说,我编写的代码只用于一个提交按钮?它可以扩展到更多。是的,我在所有重要的输入上设置了一个类来识别它们。非常感谢你!