模擬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
}
}
在回答你的評論。 我認爲:
- 要防止click事件,如果證實爲假,
- 是您添加的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;
});
});
我也建議使用窗體本身,而不是 「提交」 事件 「點擊」(the demo of submit)
爲什麼你需要添加延遲? – Blender 2013-04-29 04:58:33
可能的重複http://stackoverflow.com/questions/3583724/how-do-i-add-a-delay-in-a-javascript-loop – Santosh 2013-04-29 04:58:42
http://stackoverflow.com/questions/5722791/wait-or -sleep-in-jquery – 2013-04-29 04:59:43