Javascript 为什么赢了';这个表单不是用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

我正试图向竞选班长提交一份表格。它们提供了代码示例,可通过Ajax发布

这是我的多步骤模式代码

          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