【问题标题】:Jquery Validation Engine : Form submitting Without ValidationJquery验证引擎:没有验证的表单提交
【发布时间】:2023-04-03 11:28:01
【问题描述】:

我正在将 Jquery 验证引擎 (https://github.com/posabsolute/jQuery-Validation-Engine) 用于我的一种表单。验证运行良好,但即使字段值不符合验证,也无法阻止表单提交:

我有一个如下的时事通讯 Sigunp 表格:

<form id="submit-newsletter" method="POST" action="">
   <input type="text" class="searchform validate[required, custom[email]]" value="Enter Your Email" id="email" name="nw-email" onblur="defaultInput(this);" onfocu    s="clearInput(this);" />
   <input type="hidden" id="newsletter" name="newsletter" value="nl" />
   <input type="submit" class="submit" title="Signup" value="Sign Up" name="newsletter-signup" onclick="newsletterSubscribe(event);" />
</form>

这个表单通过ajax提交如下:

// Newsletter Subscription Without Refresh

function newsletterSubscribe(e) {
  e.preventDefault();
  var dataString = 'nw-email=' + $('input[name=nw-email]').val() + '&newsletter=' + $('input[name=newsletter]').val();
  $.ajax({
    type: "POST",
    url: "/newsletter/",
    data: dataString,
    success: function () {
      $('#newsletter-box').html('<div id="message"></div>');
      $('#message').html('<img width="18px" height="18px" src="/static/img/smtick.png" /><h5>Thank You !</h5>')
      .append('<p>We have recieved your request. Please Check your mail for activation instructions. You will start recieving our newsletter once you have verified t    his email address.</p>')
      .hide()
      .fadeIn(1200);
      }
  });
  return false;
}

验证触发器如下:

$(document).ready(function() {
  $('#submit-newsletter').validationEngine();
});

现在我可以看到验证错误消息,但是如果我按下提交按钮,则无论值不是电子邮件地址,都会提交表单。

有什么想法吗?

【问题讨论】:

    标签: jquery jquery-validation-engine ajax-forms


    【解决方案1】:

    将代码移动到单击事件处理程序中并使用 jquery 绑定它。然后使用验证引擎 validate 方法测试您的表单是否有效。

    $(function(){
        $('#newsletter-signup').click(function(e){
             e.preventDefault();
    
             //if invalid do nothing
             if(!$("#submit-newsletter").validationEngine('validate')){
             return false;
              }
    
    
          var dataString = 'nw-email=' + $('input[name=nw-email]').val() + '&newsletter=' + $('input[name=newsletter]').val();
          $.ajax({
            type: "POST",
            url: "/newsletter/",
            data: dataString,
            success: function () {
              $('#newsletter-box').html('<div id="message"></div>');
              $('#message').html('<img width="18px" height="18px" src="/static/img/smtick.png" /><h5>Thank You !</h5>')
              .append('<p>We have recieved your request. Please Check your mail for activation instructions. You will start recieving our newsletter once you have verified t    his email address.</p>')
              .hide()
              .fadeIn(1200);
              }
          });
          return false;
        })
    });
    

    【讨论】:

    • 谢谢 这反过来工作,因为它检查它是否有效,然后它返回 false。但是我明白了,我已经更改了它以检查它是否有效,然后继续使用 ajax 函数,否则返回 false。谢谢@Jason
    • 确实这是检查表单是否有效的诀窍,但我会将此自定义 AJAX POST 绑定到表单提交事件,而不是按钮单击,因为即使用户点击表单也可能会发布在任何字段上输入 ;) $("#myForm").on('submit', function(e){e.preventDefault(); ....}) 在这种情况下,如果事件触发器将是表单,您可以轻松构建要传递的数据对象,如下所示:data:$(this).serialize() 就是这样,不再需要构建 dataString ; )
    【解决方案2】:

    如果您将提交放在表单中,它将尝试提交而不管您的验证如何。它主要发生在 Mozilla 中。..

    尝试将提交放在表单之外

    <form id="submit-newsletter" method="POST" action="">
       <input type="text" class="searchform validate[required, custom[email]]" value="Enter Your Email" id="email" name="nw-email" onblur="defaultInput(this);" onfocu    s="clearInput(this);" />
       <input type="hidden" id="newsletter" name="newsletter" value="nl" />
    </form>
       <input type="submit" class="submit" title="Signup" value="Sign Up" name="newsletter-signup" onclick="newsletterSubscribe(event);" />
    

    甚至你也可以在表单外创建一个提交按钮..

    <button class="submit" title="Signup" value="Sign Up" name="newsletter-signup" onclick="newsletterSubscribe(event);" />
    

    希望这可行:)

    【讨论】:

    • 您可以像这样将自定义验证代码直接绑定到表单&lt;form id="submit-newsletter" method="POST" action="" onsubmit="return myCystomFunctionAlwaysReturnsFalse()"&gt; 的行为与您在提交表单时绑定 jQuery 相同,并通过始终返回 false 来防止其执行默认操作;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多