2012-06-27 44 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'); 
    } 
} 

它的作品!