2012-06-27 82 views
2

我在使用FAPI創建的表單中使用#ajax提交按鈕。現在當用戶提交表單時,我希望在通過ajax提交表單之前運行一些jQuery驗證。由於#ajax可以防止與提交按鈕相關的事件,如提交,點擊,mousedown,按鍵等。我無法使用jQuery捕獲提交事件。Drupal 7 FAPI ajax和jquery提交事件

對於ajax.js現在作爲一個解決辦法,我已經添加自定義代碼(MISC/ajax.js):

Drupal.ajax = function (base, element, element_settings) { 
    ... 
    beforeSubmit: function (form_values, element_settings, options) { 
     //my custom code 
     alert(1); 
     ... 

這是對Drupal的最佳做法,我黑客攻擊的核心。請任何人都可以幫助我從我的自定義js文件或任何其他方法來做同樣的事情,以在ajax提交之前驗證內容。

回答

2

我認爲以下後接受的答案回答你的問題:How to extend or "hook" Drupal Form AJAX?

(function($) { 
Drupal.behaviors.MyModule = { 
attach: function (context, settings) { 

    // Overwrite beforeSubmit 
    Drupal.ajax['some_element'].options.beforeSubmit = function (form_values, element, options) { 
     // ... Some staff added to form_values 
    } 
    //Or you can overwrite beforeSubmit 
    Drupal.ajax['some_element'].options.beforeSerialize = function (element, options) { 

     // ... Some staff added to options.data 
     // Also call parent function 
     Drupal.ajax.prototype.beforeSerialize(element, options); 
    } 

       //... 
+0

感謝您的回覆。我試過---- Drupal.ajax ['some_element']。options.beforeSubmit = function(form_values,element_settings,options){ \t \t \t \t alert(1); \t \t \t \t - - - - }和 也----- Drupal.ajax.options.beforeSubmit =函數(form_values,element_settings,選項){ \t \t \t \t警報(1); \t \t \t \t} ----- 沒有運氣。我是否缺少任何東西,我需要傳遞給ajax ['some_element'],即some_element是傳遞給Drupal.ajax函數的參數 – user1122495

+0

同樣的問題在這裏,我知道一些東西在下面的鏈接。因爲我沒有得到任何解決方案。 Drupal.ajax ['some_element']。options.beforeSubmit – Drupalrk

+0

你確定在$(document).ready事件監聽器中沒有這部分代碼嗎?查看https://drupal.org/node/304258#drupal-behaviors時,Drupal將屬性附加到行爲。 –

0

我把這個在附加功能

for (var base in settings.ajax) { 
    Drupal.ajax[base].options.beforeSubmit = function(form_values, element, options){ 
    console.log('call your func'); 
    } 
} 

它的作品!