HTML5 模式并且 AJAX 需要 POST

HTML5 Pattern and Required with AJAX POST

我有一个当前通过 AJAX 提交的表单,但是我想使用内联 HTML5 模式验证和所需的功能。

我怎样才能做到这一点并仍然通过 AJAX 提交?我在这里玩过其他一些答案,但我在许多表单上使用这个 AJAX 并在按钮中将数据传递给它。

我移动了简单的内联 JS 以便于查看整个表单

<form enctype="multipart/form-data" action="/processing.php?page=vmrp" method="post" accept-charset="UTF-8" id="formvmrp">
    <input type="checkbox" name="changePIN" onclick="document.getElementById(\'pintext\').style.display = (this.checked) ? \'block\' : \'none\'; document.getElementById(\'nopintext\').style.display = (this.checked) ? \'none\' : \'block\'; " /> Change My PIN
    <div id="nopintext" style="display: block;">
         <button onclick="submitForm(\'vmrp\',\'uvml\')">Unlock Voicemail</button>
    </div>
    <div id="pintext" style="display: none;">
         <label for="edit-submitted-user-name">New PIN: <span class="form-required" title="This field is required.">*</span></label>
         <br>PIN Must be 6 numbers<br>
         <input required="required" type="password" placeholder="New 6 Digit PIN" id="edit-submitted-user-name" name="PIN" value="" pattern="[0-9]{6}" maxlength="6" size="75" title="PIN Must Contain 6 numbers!" class="form-text required" /><br>
         <button onclick="submitForm(\'vmrp\',\'uvml\')">Change PIN</button>
    </div>
    <input type="hidden" name="form_id" value="uVMResetPIN" />
    <input type="hidden" name="uVMPINURI" value="' . (string)$_SESSION['uVMPINURI'] . '" />
    <input type="hidden" name="rmtIP" value="' . $_SERVER['REMOTE_ADDR'] . '" />
    <input type="hidden" name="tz" value="' . $_SESSION['uVMtzn'] . '" />
    <input type="hidden" name="user" value="' . $_SESSION['inUser'] . '" />                                                                     
</form>

HTML5 验证仅在您的表单将获得 submitted.If 时才有效,您只需序列化表单并通过 ajax 发送,然后 html5 验证将从来没有 occur.Still 你随时调用 checkValidity() 表单方法来知道是否所有必需的输入都已填写

但是..

较新的浏览器现在已经实现了 reportValidity() 方法,您可以随时调用该方法来验证并显示错误,即。就像用户按下提交 button.Only 一样,这里的问题是某些较旧的浏览器不支持。您添加条件检查并在可用时使用

function submitForm(blah,blah)
{
    $yourForm = $('#formvmrp');

    if (typeof $yourForm[0].reportValidity === "function") { 
        if($yourForm.reportValidity())   // will evaluate to TRUE if all ok else FALSE and also show validation messages
        {
            // do ajax 
        }
    } else {
        if($yourForm[0].checkValidity()) // will evaluate to TRUE if all ok else FALSE but won't show validation messages
        { 
            // do ajax 
        }
        else {
                alert('please fill all the details');
       }
    }
}