欧芹。js远程验证响应在ParsleyUI之后仍然验证为true。n.恐怖,恐怖

StackOverflow https://stackoverflow.com//questions/25049536

  •  21-12-2019
  •  | 
  •  

我有这个表格:

<form method="post" id="myForm" data-parsley-validate>
<input type="text" name="firstName" id="firstName" required>
<input type="text" name="lastName" id="lastName" required>
<input type="text" name="userName" id="userName" 
            data-parsley-trigger="focusout" 
            data-parsley-remote
            data-parsley-remote-options='{ "type": "POST" }'
            data-parsley-remote-validator='validateName'
            required>
<input type="button" id="formSave" name="submit" value="Next">
</form>

和脚本:

var userName = $('#userName').parsley();
var _xsrf = $("[name='_xsrf']").val();
$('#myForm').parsley()
    .addAsyncValidator('validateName', function(xhr) {
        window.ParsleyUI.removeError(userName, 'name-exists');
        if (xhr.status == '404') {
            window.ParsleyUI.addError(userName, 'name-exists', "Name already exists.");
            return 404;
        } else if (xhr.status == '200') {
            return 200;
        }
    }, '/validate/?country=' + country + '&_xsrf=' + _xsrf);

如果用户已经存在,错误消息将正确显示,但该字段仍被验证为正确。

在欧芹的v1中做到这一点很容易。js的 :/

有帮助吗?

解决方案

我对你的html和js做了一些更改:

<form method="post" id="myForm">
    <input type="text" name="_xsrf" id="_xsrf" value="test">
    <input type="text" name="userName" id="userName" 
            data-parsley-trigger="focusout"
            data-parsley-remote
            data-parsley-remote-options='{ "type": "POST" }'
            data-parsley-remote-validator="validateName"
            data-parsley-remote-message="Name already exists."
            required>
    <!--<input type="button" id="formSave" name="submit" value="Next">-->
    <input type="submit" id="formSave" name="formSave" value="Next">
</form>

这不是一个好主意,设置 submit 作为你的按钮的名称。支票 这个答案这个答案.

在你的javascript中,附加 addAsyncValidator 到你的领域而不是表格。至于验证器响应,它必须返回 truefalse.如果你希望你的领域是有效的,当你得到一个 200 响应,那么你必须使用

return xhr.status === 200

如果假设该字段在状态响应为 404, ,那么你应该使用:

return xhr.status === 404

这是为我工作的代码。如果您使用返回一个有效的URL 404 状态代码,将显示错误,并且不会验证表单。

var _xsrf = $("#_xsrf").val();
var userName = $("#userName").parsley()
    .addAsyncValidator('validateName', function (xhr) {
         return xhr.status === 200;
    }, 'http://localhost/parsley/CheckEmailAvailability.php?_xsrf=' + _xsrf);

$( "#myForm" ).parsley();

$("#myForm" ).submit(function( event ) {
    $(this).parsley("validate");
    if ($(this).parsley("isValid")) {
        console.log('valid');
    }
    event.preventDefault();
});

这个jsfiddle 为完整的代码。由于您必须执行服务器请求,因此表单永远不会被验证(由于Access-Control-Allow-Origin)。但是,如果你用一个有效的请求在本地测试这个,它会工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top