2

FAPIで作成したフォームの送信ボタンに#ajaxを使用しています。ユーザーがフォームを送信すると、フォームが ajax を介して送信される前に、jQuery 検証を実行したいと考えています。#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送信前にコンテンツを検証する他のアプローチから同じことを行うのを手伝ってください。

4

2 に答える 2

2

次の投稿で受け入れられた回答があなたの質問に答えていると思います: 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);
    }

                //...
于 2012-06-27T10:16:53.910 に答える
0

これをアタッチ機能に入れました

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

できます!

于 2013-04-11T06:32:36.850 に答える