2011-12-17 35 views
1

您好我想在使用Drupal表单API的下拉列表中使用Ajax。问题是我想阻止用户在来自服务器的Ajax响应返回之前提交表单。当选择列表状态被改变并且服务器响应请求时,如何禁用提交按钮或阻止任何其他用户操作。 旁边我用一个简单的表单,其中ajax已经连接到组合框选择列表如何防止在等待时间内提交表单在drupal中响应7

+0

你的意思是说,你已经选择哪个工作作为AJAX选择器,并且你想禁用可能性y在AJAX加载时提交表单? – 2011-12-22 12:11:27

+0

是的,这是真的 – user435245 2011-12-25 13:26:55

回答

5

阿贾克斯Drupal有一个名为.ajaxStart

公共方法

你可以做一个

jQuery('#form_id').ajaxStart(function(){ //Here you prevent shit }); 

并且还拥有一个名为.ajaxSuccess为完成动作

0

jQuery允许您在AJAX调用完成后运行代码。当组合框更改时,您可以禁用您的元素,然后启用success上的所有内容。以下是我从jQuery.ajax() Docs获得的一个示例。

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    $('.result').html(data); 
    alert('Load was performed.'); 
    } 
}); 
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工作。 检查它。

0

设置一个全局标志

var flag = true; 

然后在你的AJAX之前,您的帖子设置标记,以虚假

flag = false; 

由于你的成功的部分功能

flag = true; 

,然后您的提交按钮

onclick="return(if(flag));" 
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"); 
    });