js で遅延をシミュレートする唯一の方法は、タイムアウト時のコールバックです。
関数を次のように変更します。
function validateAddToCartForm(object,callback) {
value = $(".product-detail-qty-box").val();
if(!isInt(value) || value < 1) {
$(".product-detail-error").show();
callback(false);
} else {
$(".product-detail-error").hide();
var product_name = $("#product_detail_name").text();
var NewDialog = $('<div id="MenuDialog">\ ' + product_name + '</div>');
NewDialog.dialog({
modal: true,
title: "title",
show: 'clip',
hide: {effect: "fadeOut", duration: 1000}
});
}
setTimeout(function() {callback(true);},5000);
}
それを呼び出す場所では、次のようにする必要があります。
それ以外の
function somefunct() {
//code before call
if (validateAddToCartForm(object)) {
//process true
} else {
//process false
}
//rest of the function
}
次のように配置します。
function somefunct() {
//code before call
validateAddToCartForm(object,function(ret) {
{
if (ret) {
//process true
} else {
//process false
}
//rest of the function
}
}
あなたのコメントに答えるために。私が想定し:
- 検証falseの場合、クリックイベントを防止したい、
- onclick="..." を追加したすべての要素のクラスが ".clickme" であること、
要素は次のようになります
<input type="submit" onclick="return validateAddToCartForm(this)" class="clickme" />
そのため、最初に要素を次のように変更します
<input type="submit" class="clickme" />
JavaScript に次を追加します。
//this handle original click, drop it out, and only pass after validation
$(function () {
$('.clickme').click(function (e) {
var $t = $(this);
//if event triggered return true
if (e.isTrigger) return true;
validateAddToCartForm(this, function (ret) {
if (ret) {
$t.trigger('click');
}
});
return false;
});
});
また、「クリック」の代わりにフォーム自体で「送信」イベントを使用することをお勧めします(送信のデモ)