HTML5検証メッセージは、フォームの送信が進行中の場合にのみポップアップ表示されることがわかりました。
これが私のソリューションの背後にあるプロセスです(タイムアウトがチェックされている場合):
- フォームを送信します
forceValidation
フラグを設定します
- タイムアウト機能を設定します
- タイムアウト関数が呼び出されたら、フォームを再送信します
forceValidation
フラグが設定されている場合は、検証メッセージを表示します
基本的に2つの送信を実行します。最初の送信はボタンによってトリガーされ、2番目の送信はタイムアウト関数が呼び出されたときにトリガーされます。
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());
};
Chromeバージョン25.0.1364.172mで実行しています。