异步html5验证

den*_*s_n 10 javascript validation html5

出于某种原因,当我使用异步请求时,不会显示html5验证消息.

在这里你可以看到一个例子.

http://jsfiddle.net/E4mPG/10/

setTimeout(function() {                
  ...
  //this is not working
  target.setCustomValidity('failed!');                
  ...
}, 1000);
Run Code Online (Sandbox Code Playgroud)

如果未选中复选框,则一切都按预期工作,但检查时,该消息不可见.

有人可以解释应该做什么吗?

Dan*_*mms 5

我想通了,结果是HTML5验证消息只会在表单提交正在进行时弹出.

以下是我的解决方案背后的过程(检查超时时):

  1. 提交表格
  2. 设置forceValidation标志
  3. 设置超时功能
  4. 调用超时函数时,重新提交表单
  5. 如果forceValidation设置了标志,则显示验证消息

基本上执行两个提交,第一个由按钮触发,第二个在调用超时函数时触发.

的jsfiddle

var lbl = $("#lbl");
var target = $("#id")[0];

var forceValidation = false;

$("form").submit(function(){
    return false;
});

$("button").click(function (){                
    var useTimeout = $("#chx").is(":checked");         

    lbl.text("processing...");
    lbl.removeClass("failed");
    target.setCustomValidity('');    
    showValidity();     

    if (forceValidation) {
        forceValidation = false;
        lbl.text("invalid!");
        lbl.addClass("failed");
        target.setCustomValidity('failed!');
        showValidity();
    } else if (useTimeout) {
        setTimeout(function () {
            forceValidation = true;
            $("button").click();
        }, 1000);
    } else {
        lbl.text("invalid without timeout!");
        lbl.addClass("failed");
        target.setCustomValidity('failed!');
        showValidity();            
    }
});

function showValidity() {                    
    $("#lbl2").text(target.checkValidity());
};
Run Code Online (Sandbox Code Playgroud)

我在Chrome版本25.0.1364.172 m上运行.