Javascript 为什么赢了';这个表单不是用AJAX提交的吗?
我正试图向竞选班长提交一份表格。它们提供了代码示例,可通过Ajax发布 这是我的多步骤模式代码Javascript 为什么赢了';这个表单不是用AJAX提交的吗?,javascript,jquery,ajax,forms,Javascript,Jquery,Ajax,Forms,我正试图向竞选班长提交一份表格。它们提供了代码示例,可通过Ajax发布 这是我的多步骤模式代码 var next_step = false; var final_step = false; $('.next').on('click', function(e){ e.preventDefault(); if (next_step) { $('#step
var next_step = false;
var final_step = false;
$('.next').on('click', function(e){
e.preventDefault();
if (next_step) {
$('#step-1').slideUp(function(){
$('#step-2').slideDown();
$('.next').html('Submit');// Change button text to submit
final_step = true;
});
}
next_step = true;
if (final_step) {
$('#myform').submit(function (e){
alert('submit started'); //This never fires unless I remove the preventDefault();
e.preventDefault();//But if I remove this, the page will refresh
$.getJSON(
this.action + "?callback=?",
$(this).serialize(),
function (data) {
if (data.Status === 400) {
alert('error');
} else {
alert('success');
}
})
});
}
});
在表单的最后一步,我检查final_step
是否为真,如果是真的,请继续通过ajax提交表单
问题是它什么都不做?但是如果我删除e.preventDefault()
从$('#myform')
中,它将正常发布表单,并将您重新定向到表单URL
如何修复此问题?这一行:$(“#myform”).submit(函数(e){
将作为参数传递的函数注册为表单提交事件的处理程序,并且不调用提交操作。我不确定这是否是问题所在,尽管我建议使用preventDefault()
在向导流程之外
(例如
)
然后在if(最后一步)
中,只需执行post
,而不必担心表单
另外,如果您不希望使用表单的功能,最好不要在表单中设置提交按钮。只需创建一个包含单击事件的元素,该事件将发送数据,而不是注册到表单的提交事件。此行:$('#myform')。提交(函数(e){
将作为参数传递的函数注册为表单提交事件的处理程序,并且不调用提交操作。我不确定这是否是问题所在,但我建议在向导流之外使用preventDefault()
(例如
)
然后在if(最后一步)
中,只需执行post
,而不必担心表单
另外,如果您不想使用表单的功能,最好不要在表单中设置提交按钮。只需创建一个包含click事件的元素来发送数据,而不是注册到表单的submit事件。我不确定,但我总是这样做。
$(“#表单”)。在click in元素后提交()
,并捕获此事件(例如通过$('#form')。在其他地方('submit',function(){..})
)上。我不确定,但我总是这样做。$('#form')。在元素中单击后提交()
,并捕获此事件(例如通过$('#form')。在其他地方('submit',function(){..})
)
$('#myform').submit(function (e){
只需注册一个事件处理程序并将其附加到“myform”的“submit”事件,它实际上不会导致提交。这意味着您希望在每次提交表单时都运行此函数。此处理程序函数应位于$('.next')之外。在('单击,'上,'函数(e){
块。就在它下面即可
如果在$('.next')中,在('click',function(e){
块上,您希望提交表单,请编写:
$('#myform').submit();
这实际上会触发表单提交
有关“提交”的不同方法签名的实际作用的更多信息,请参阅
只需注册一个事件处理程序并将其附加到“myform”的“submit”事件,它实际上不会导致提交。这意味着您希望在每次提交表单时都运行此函数。此处理程序函数应位于$('.next')之外。在('单击,'上,'函数(e){
块。就在它下面即可
如果在$('.next')中,在('click',function(e){
块上,您希望提交表单,请编写:
$('#myform').submit();
这实际上会触发表单提交
有关“submit”的不同方法签名的实际功能的更多信息,请参阅。您当前正在连接onsubmit处理程序,而不是调用submit
$('#myform').submit(function (e){ });
…和…是一样的
<form action="#" method="post" onsubmit="return someFunction()">
您永远不会提交表单
您需要的是使用Ajax将数据发布到服务器,而不是提交表单
您可以这样做:
$.ajax({
type: "POST",
url: "SomeUrl.aspx",
data: dataString,
success: function() {
//display message back to user here
}
});
数据字符串将替换为您发布的值。您当前正在连接onsubmit处理程序,而不是调用submit
$('#myform').submit(function (e){ });
…和…是一样的
<form action="#" method="post" onsubmit="return someFunction()">
您永远不会提交表单
您需要的是使用Ajax将数据发布到服务器,而不是提交表单
您可以这样做:
$.ajax({
type: "POST",
url: "SomeUrl.aspx",
data: dataString,
success: function() {
//display message back to user here
}
});
数据字符串将替换为您发布的值。删除
if(data.Status==400){
条件并检查响应是否存在为什么使用?callback=?
?是否使用JSONP?getJSON
将发出GET
请求,而不是POST。要发出POST请求,您可能需要使用带有JSONP参数化的$.ajax或$.POST,我不能,因为脚本甚至没有达到那个程度。请参阅更新的提问并查看我在提交部分中警报旁边的评论。我使用的是?callback=?
,因为它是由Campaign Monitor提供的代码。您可以通过单击页面顶部的链接查看要点。删除if(data.Status==400){
条件并检查响应是否存在为什么使用?callback=?
?是否使用JSONP?getJSON
将发出GET
请求,而不是POST。要发出POST请求,您可能需要使用带有JSONP参数化的$.ajax或$.POST,我不能,因为脚本甚至没有达到那个程度。请参阅更新的提问并查看我在提交部分中警报旁边的评论。我使用的是?callback=?
,因为它是由Campaign Monitor提供的代码。您可以通过单击页面顶部的链接来查看要点。我对按钮使用的不是提交类型的输入,而是带有jquery.on('click')的标准锚定标记根据您的解释,发布表单并在('submit')
上使用.on('submit')
来防止页面刷新,而不是.submit();
?您可以在提交表单的最后一页上创建一个按钮,然后在f