Javascript 对使用';取消的submit()操作作出反应的最简单方法是什么;返回false';
我有一些带有jQuery事件处理程序的图像按钮 我想在click()事件中进行一个AJAX调用,以确定是否应该允许该操作。因为我正在执行一个异步ajax调用,所以我必须返回'false'以立即取消事件并等待响应Javascript 对使用';取消的submit()操作作出反应的最简单方法是什么;返回false';,javascript,jquery,Javascript,Jquery,我有一些带有jQuery事件处理程序的图像按钮 我想在click()事件中进行一个AJAX调用,以确定是否应该允许该操作。因为我正在执行一个异步ajax调用,所以我必须返回'false'以立即取消事件并等待响应 $('[id^=btnShoppingCartStep_]').click(function() { var stepName = this.id.substring("btnShoppingCartStep_".length); $.ajax({ typ
$('[id^=btnShoppingCartStep_]').click(function() {
var stepName = this.id.substring("btnShoppingCartStep_".length);
$.ajax({
type: "POST",
url: $.url("isActionAllowed"),
data: "requestedStep=" + stepName,
dataType: "json",
success: function(data) {
if (data.allowed) {
// need to resume the action here
}
else {
AlertDialog(data.message, "Not allowed!");
}
}
});
return false;
});
如果AJAX调用决定应该允许单击事件,我需要找到恢复单击事件的最佳方法
我能想出的任何方法都显得笨拙,例如:
1) 从按钮中删除事件处理程序
2) 模拟单击已单击的按钮
有什么好的方法可以做到这一点吗?我不知道?给表单分配一个ID。假设您将其命名为
myForm
。如果您的//需要恢复此处的操作,请使用以下命令:
$("#myForm").trigger("submit");
1) 只需调用表单的submit()方法
2) 此外,如果您希望截取针对该目的的表单提交,您可能希望执行稍微不同的操作(例如,如果您可以通过>1按钮提交表单):
确认请求的有效性需要多长时间?在这段时间内,用户还会做什么
为什么不让服务器进行验证?这太危险了吗?您可以简单地将数据传递给服务器,让它确定数据是否有效。如果不是,它会告诉Ajax“不允许”,该函数会提醒用户。如果它喜欢数据,则无需恢复操作,因为操作已经完成。如果需要提交表单:
$('#form_id').submit();
如果需要继续此功能:
var allowed_actions = {};
$('[id^=btnShoppingCartStep_]').click(function() {
var stepName = this.id.substring("btnShoppingCartStep_".length);
var $click_me_again = $(this);
if (!allowed_actions[stepName]) {
$.ajax({
type: "POST",
url: $.url("isActionAllowed"),
data: "requestedStep=" + stepName,
dataType: "json",
success: function(data) {
if (data.allowed) {
// need to resume the action here
allowed_actions[stepName] = true;
$click_me_again.click();
}
else {
AlertDialog(data.message, "Not allowed!");
}
}
});
return false;
} // end if
// continue function (check passed)
});
为什么你不能在用户想要点击“提交”之前在后台检查呢?也可以考虑做阻塞请求。为什么不试试块用户界面?[?感谢您提供的额外信息。将有额外的服务器端验证-我只是不希望用户在尝试转到另一个可能不允许他们访问的页面时,丢失他们在当前页面上已经做出的任何选择。我现在没有时间完全用javascript复制服务器端逻辑。这更像是一种礼貌用户比我现在实现它的任何方式都重要。
$('#form_id').submit();
var allowed_actions = {};
$('[id^=btnShoppingCartStep_]').click(function() {
var stepName = this.id.substring("btnShoppingCartStep_".length);
var $click_me_again = $(this);
if (!allowed_actions[stepName]) {
$.ajax({
type: "POST",
url: $.url("isActionAllowed"),
data: "requestedStep=" + stepName,
dataType: "json",
success: function(data) {
if (data.allowed) {
// need to resume the action here
allowed_actions[stepName] = true;
$click_me_again.click();
}
else {
AlertDialog(data.message, "Not allowed!");
}
}
});
return false;
} // end if
// continue function (check passed)
});