2011-12-17 37 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"); 
    });