在那里,我想使用Drupal表单API在下拉列表中使用Ajax。问题是我想阻止用户在服务器的Ajax响应返回之前提交表单。如何在更改选择列表状态并且服务器响应请求时禁用提交按钮或阻止任何其他用户操作。 我正在使用drupal 7和一个简单的形式,其中ajax已附加到组合框选择列表
答案 0 :(得分:5)
Drupal中的Ajax有一个名为.ajaxStart的公共方法
你可以做一个
jQuery('#form_id').ajaxStart(function(){ //Here you prevent shit } );
并且还有一个名为.ajaxSuccess的方法用于完成操作
答案 1 :(得分:0)
jQuery允许您在AJAX调用完成后运行代码。您可以在更改组合框时禁用元素,然后在success
上启用所有内容。以下是我从jQuery.ajax() Docs中提取的一个示例。
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(data);
alert('Load was performed.');
}
});
答案 2 :(得分:0)
这只是一个技巧,您应该使用它来阻止在ajax加载期间提交。 在ajax加载期间,只需禁用提交按钮并在成功时启用它。 像那样: 假设提交按钮的id是:submit_button,那么
$("#submit_button").attr("disabled", "disabled");
$.ajax({
url: 'html-data/demo.html',
success: function(data) {
$('#resultDiv').html(data);
$('#submit_button').removeAttr("disabled");
}
});
上面的代码在jquery中,它将在Drupal中运行。 检查一下。
答案 3 :(得分:0)
设置全局标记
var flag = true;
然后在您的发布之前在您的AJAX中将标志设置为false
flag = false;
作为成功函数的一部分
flag = true;
然后在提交按钮上
onclick="return(if(flag));"
答案 4 :(得分:0)
这是我对它的看法
$(document).ajaxComplete(function(){
// the code to be fired after the AJAX is completed
$('#edit-submit').removeAttr("disabled");
});
$(document).ajaxStart(function(){
event.preventDefault();
$("#edit-submit").attr("disabled", "disabled");
} );