我有一些图像按钮,它们附加了jQuery事件处理程序。
我想在click()事件中进行AJAX调用,以确定是否应该实际允许该操作。因为我正在进行异步ajax调用,所以我必须返回'false'以立即取消该事件并等待响应。
$('[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调用确定应该允许它,我需要找到恢复click事件的最佳方法。
任何这样做我能想到的方法看起来都很笨拙,例如:
1)从按钮
中删除事件处理程序2)模拟点击的按钮
有什么好办法让我失踪吗?
答案 0 :(得分:1)
确认请求的有效性需要多长时间?在此期间用户还会做些什么?
为什么不让服务器进行验证?那风险太大了吗?您可以简单地将数据传递给服务器,让它确定它是否有效。如果不是,它会告诉Ajax“不允许”,该功能会提醒用户。如果它喜欢这些数据,则无需恢复已完成的操作。
答案 1 :(得分:1)
如果您需要提交表单:
$('#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)
});
答案 2 :(得分:0)
为表单指定ID。假设您将其命名为myForm
。您// need to resume the action here
的位置,请使用:
$("#myForm").trigger("submit");
答案 3 :(得分:0)
1)只需调用表单的submit()方法。
$("#FormID").submit();
2)此外,如果你想要截取表单的提交,你可能想要略有不同(例如,如果你可以通过> 1按钮提交表单):
$("form").submit(function() {
...