38

这应该很简单,但它让我发疯。我有一个使用 ajax 提交的 html5 表单。如果您输入了无效值,则会有一个弹出响应告诉您。在运行 ajax 提交之前,如何检查条目是否有效?

形式:

<form id="contactForm" onsubmit="return false;">
  <label for="name">Name:</label>
  <input type="text" name="name" id="name" required placeholder="Name" />
  <label for="subject">Subject:</label>
  <input type="text" name="subject" id="subject" required placeholder="Subject" />
  <label for="email">Email:</label>
  <input type="email" name="email" id="email" required placeholder="email@example.com" />
  <label for="message">Message:</label>
  <textarea name="message" id="message" required></textarea>
  <input type="submit" id="submit"/>
</form>

提交:

$('#submit').click(function(){
    var name = $("input#name").val();
    var subject = $("input#subject").val();
    var email = $("input#email").val();
    var message = $("input#message").val();

    var dataString = 'email=' + email + '&message=' + message + '&subject=' + subject + '&name=' + name ; 

    $.ajax({
        url: "scripts/mail.php",
        type:   'POST',
        data: dataString,
        success: function(msg){
            disablePopupContact();
            $("#popupMessageSent").css("visibility", "visible");
        },
        error: function() {
            alert("Bad submit");
        }
    });
});
4

6 回答 6

59

如果您绑定到提交事件而不是单击它只会在它通过 HTML5 验证时触发。

如果您多次使用它,最好将 jQuery 选择器缓存在变量中,这样您就不必在每次访问元素时都导航 DOM。jQuery 还提供了一个 .serialize() 函数,它将为您处理表单数据解析。

var $contactForm = $('#contactForm');

$contactForm.on('submit', function(ev){
    ev.preventDefault();

    $.ajax({
        url: "scripts/mail.php",
        type:   'POST',
        data: $contactForm.serialize(),
        success: function(msg){
            disablePopupContact();
            $("#popupMessageSent").css("visibility", "visible");
        },
        error: function() {
            alert("Bad submit");
        }
    });
});
于 2013-11-13T22:30:54.967 回答
55

默认情况下,jQuery 对 HTML5 验证一无所知,因此您必须执行以下操作:

$('#submit').click(function(){
    if($("form")[0].checkValidity()) {
        //your form execution code
    }else console.log("invalid form");
});
于 2013-03-30T00:35:00.553 回答
4

如果您使用 HTML5 表单验证,则必须在表单的提交处理程序中发送 ajax 请求。提交处理程序只会在表单验证时触发。您正在使用的是一个按钮单击处理程序,它将始终触发,因为它与表单验证没有关联。注意:并非所有浏览器都支持 html5 表单验证。

于 2013-03-30T01:24:28.257 回答
2

我更喜欢使用 jQuery 提交处理程序,您仍然可以使用以下方法获得对表单的响应。

jQuery('#contactForm').on('submit', function (e) {
    if (document.getElementById("contactForm").checkValidity()) {
        e.preventDefault();
        jQuery.ajax({
            url: '/some/url',
            method: 'POST',
            data: jQuery('#contactForm').serialize(),
            success: function (response) {
                //do stuff with response
            }
        })
    }
    return true;
});
于 2017-11-12T19:46:16.000 回答
0

不完全确定你的意思。但我假设您想实时检查输入是否有效。如果是这样,您应该使用 .keyup 而不是 .click 事件,因为如果用户按下提交,这将导致操作。看http://api.jquery.com/keyup/

有了这个,您可以检查每个新字符插入的输入并显示例如“无效”,直到您的验证为真。

我希望这回答了你的问题!

于 2013-03-30T00:38:13.647 回答
-2

你也可以使用 jquery validate 方法来验证表单,比如

$("#form id").validate();

它根据表单验证返回布尔值,您还可以使用 errorList 方法在日志中看到错误。

要使用上述功能,您必须在脚本中包含 jquery.validate.js 文件

于 2013-04-06T10:54:37.523 回答