在 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 
    }
}
在回答您的评论。我假设:
- 如果验证为假,您想阻止点击事件,
- 您添加的所有元素 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;
    });
});
我还建议在表单本身上使用“提交”事件而不是“点击”(提交的演示)