代码之家  ›  专栏  ›  技术社区  ›  jerrygarciuh

使用enter提交时的AJAX表单提交

  •  1
  • jerrygarciuh  · 技术社区  · 14 年前

    我有一个设计师坚持通过点击enter提交一个表单字段,点击AJAX发布的帖子和Fancybox提供的响应。

    问题是 return false 不阻止提交页。

    我哪里做错了什么?

    <form id="home_stay_informed_form">
    <input name="informed_email" id="home_informed_email" value="Enter your email address..." />
    </form>
    
    
    $('#home_stay_informed_form').submit(function() {
      var reg = new RegExp(/^\S+@\S+\.\S+$/);
      var em = $("#home_informed_email").val();
      if (!reg.test(em)) {
      alert('Please correct your email address.');
      $("#home_informed_email").focus();
        return false;
      } else {
      $.ajax({
        type: "POST",
        url: 'listSubscribe.php',
        data : 'email=' + em,
        success: function(msg) {
         $("#home_stay_informed_form_msg").fancybox({
        'titlePosition'  : 'outside',
        'transitionIn'  : 'none',
        'transitionOut'  : 'none'
       });
        $("#home_informed_email").val('Enter your email address...');
        return false;
        }
      });   
      }
    });
    
    1 回复  |  直到 13 年前
        1
  •  3
  •   Nick Craver    14 年前

    这个 return false 需要在 submit 直接处理程序,如下所示:

    $('#home_stay_informed_form').submit(function() {
      var reg = new RegExp(/^\S+@\S+\.\S+$/);
      var em = $("#home_informed_email").val();
      if (!reg.test(em)) {
        alert('Please correct your email address.');
        $("#home_informed_email").focus();
      } else {
        $.ajax({
          type: "POST",
          url: 'listSubscribe.php',
          data : 'email=' + em,
          success: function(msg) {
            $("#home_stay_informed_form_msg").fancybox({
              'titlePosition'  : 'outside',
              'transitionIn'  : 'none',
              'transitionOut'  : 'none'
            });
            $("#home_informed_email").val('Enter your email address...');
          }
        });   
      }
      return false;
    });
    

    你的 success 在服务器响应返回之前,处理程序不会运行,因此您的函数实际上正在返回 undefined 为了这个 else 声明…还有 返回false 里面没有任何效果。把它放进 提交 直接像上面这样的处理程序将做您想要的事情,防止表单提交。


    再干净一点 event.preventDefault() ,在此处添加事件参数:

    $('#home_stay_informed_form').submit(function(e) {
    

    以及替换 返回false 具有

    e.preventDefault();