在 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;
});
});
我还建议在表单本身上使用“提交”事件而不是“点击”(提交的演示)