嗨,

例如,如果我需要调用自定义JavaScript函数,全球可用,窗体阿贾克斯更迭之后,会是什么做的最好方法是什么?JavaScript代码将在阿贾克斯生成提交回调。

注释

Jaypan的图片

编辑:对不起,错版的Drupal。


Drupal的机构已经关闭了在改善论坛讨论:https://www.drupal.org/node/2536122

现在是时候开始新的论坛,在其他地方。Drupal的组织不关心论坛。


cesarpo的图片

不管怎样,谢谢你!

还有谁?

kenianbei的图片

我在寻找同样的,我需要添加ajax_deliver后的js文件()返回页面。

kenianbei的图片

我能做到什么,我需要ajax_command_invoke。
HTTP://api.drupal.org/api/drupal/includes--ajax.inc/function/ajax_comman ...

cesarpo的图片

请你会这么好心,告诉我你是怎么做到的?

在最后,我用我自己的编码阿贾克斯,但想知道'Drupal的方式“:)

StryKaizer的图片

寻找Drupal的解决方案太

StryKaizer的图片

我做了一个自定义的jQuery函数调用我的功能。如果有一个更好的解决方案,随时纠正。

在我的回调函数:

$commands[] = ajax_command_invoke(NULL, "myJavascriptFunction", array($myCustomParameters) );

return array(
        '#type' => 'ajax',
        '#commands' => $commands,
);

在自定义JavaScript中,我创建了一个jQuery函数

(function($) {
	$.fn.myJavascriptFunction = function(data) {
		alert(data);
	};
})(jQuery);
cesarpo的图片

只是想在这里添加一个快速的注意,该解决方案为我工作很好。感谢张贴你的代码!

对于我所用,我想叫一个自定义JavaScript命令,然后做插入重建表单元素进入阿贾克斯['#包装']的正常行为。我没有使用类似于下面的代码东西在我的回调函数如下:

  $commands[] = ajax_command_invoke(NULL, 'myJavascriptFunction', array($foo));
  $html = drupal_render($form['bar']);
  $commands[] = ajax_command_insert(NULL, $html);

  return array(
    '#type' => 'ajax',
    '#commands' => $commands,
  );

如果任何人有这种做法的任何反馈,这将是巨大的来信。

damien_vancouver的图片

该解决方案帮助我出去呢!我想使用jQuery来修改字段值,因为我本来就不是重建一个形式。所以我完成它像这样,在不使用的.js文件和myJavascriptFunction:

  // inside Ajax callback function

  $commands = array();

  // set Title and body form elements using jQuery's .val().
  $commands[] = ajax_command_invoke('#edit-body-title', 'val', array('new Title'));
  $commands[] = ajax_command_invoke('#edit-body-und-0-value', 'val', array('New body Text'));
  // Use ajax_command_html to replace the contents of  with an empty string
  $commands[] = ajax_command_html('#div-ajax-form','');   // Hide contents of ajax form

  return array('#type' => 'ajax', '#commands' => $commands);

Works great!   But now what I really want to do is run other Javascript commands without using the .js file, ie. something like:
   // This doesn't work
   $commands[]  = ajax_command_invoke('Window','alert',array('Hi there!'));
   // Nor does this, which is really what I'd like to accomplish without needing to wrap it in a .js file function
   $commands[] = ajax_command_invoke(NULL,'Drupal.ckeditorOff',array('edit-body')

Does anyone have any insight as to how I can run commands like Window.alert() or Drupal.ckeditorOff() using an Ajax command array?
rszrama的图片

你将不得不做上述表示的解决方案; 无论定义其他的JavaScript要执行和使用ajax_command_invoke调用它()的执行jQuery插件功能。下面是关于我发现的有用的主题的教程:HTTP://addictedtonew.com/archives/414/creating-a-jquery-plugin-from-scra ...

------------------------------------------ 
了解更多:HTTP:// ryanszrama .COM /主题/的Drupal

petu的图片

该链接被打破:(

这篇文章帮助我:Drupal的7 Ajax调用后执行JavaScript代码

cesarpo的图片

作为替代方案,你可以插入脚本标记到文档中。

$commands[] = ajax_command_append('body', '<script>alert("foo");</script>');

情况因人而异。我想做的事是这样,因为我不能依靠我的jQuery函数的定义,我需要调用的函数之后被加载。只要想到我会折腾这个在那里为别人寻找另一种方式。

cesarpo的图片

伟大的回答,感谢张贴...

cesarpo的图片

该解决方案建议为Drupal 6(呼叫在Drupal 6的AHAH事件之后的函数)的7对我的作品也很好,非常简单。我已经添加了JavaScript的内联:

drupal_add_js('jQuery(document).ajaxComplete(function(){		
			// the code to be fired after the AJAX is completed											
		});', 'inline');
cesarpo的图片

对我来说,.ajaxcomplete解雇甚至当我的表单验证未成功。解决这个问题的最好办法是写一个定制的ajax插件。

我包括在我的主动.js文件中是这样的:

$(function () {
  if (!Drupal.Ajax) return;
  Drupal.Ajax.plugins.yourAction = function (hook, args) {
    if (hook == 'message' && args.data.form_id == 'your_form' && args.data.status == true) {
      // args.data.status is true only after validation clears
      // Your js here
    }
  };
});

你可以在你的ARGS用的console.log()的结构好好看看,然后向下钻取,所以当你需要它的代码只执行完全相同。AJAX的插件被称为ajax.js,如果你想看看。

Jaypan的图片

它会工作,但实际上,我因为写了关于如何做到这一点在现在D7使用AJAX命令(这是做在D7的方式)的教程。一个#AJAX事件发生后调用一个函数(Drupal的7)


Drupal的机构已经关闭了在改善论坛讨论:https://www.drupal.org/node/2536122

现在是时候开始新的论坛,在其他地方。Drupal的组织不关心论坛。


cesarpo的图片

这是非常好的教程。化险为夷。:)

Skype的ID:shashwatpurav8

mahipal46的图片

(文档)$ .ajaxStop(函数(){ 
//调用您的js代码
});

阿斯加尔的图片

(function($) {

  Drupal.testAjax = {
    // Our form
    form_id: Your-Form-ID'  //Yes, I tested on my extended node creation form
  };

  Drupal.behaviors.testAjax = {
      
    attach: function(context, settings) {
      // We extend Drupal.ajax objects for all AJAX elements in our form 
      for (ajax_el in settings.ajax) {
        if (typeof Drupal.ajax[ajax_el] != 'undefined' && Drupal.ajax[ajax_el].element.form) {
          if (Drupal.ajax[ajax_el].element.form.id === Drupal.testAjax.form_id) {
            Drupal.ajax[ajax_el].beforeSend = Drupal.testAjax.beforeSend;
            Drupal.ajax[ajax_el].success = Drupal.testAjax.success;
            Drupal.ajax[ajax_el].error = Drupal.testAjax.error;
          }
        }
      }
    }   
  };

  // Disable form
  Drupal.testAjax.beforeSend = function (first, second) {
     console.log("Before Submit");
    // Call Drupal parent method 
    Drupal.ajax.prototype.beforeSend.call(this, first, second);
  }



  Drupal.testAjax.success = function (response, status) {
      console.log("On Success");
    // Call original method with main functionality
    Drupal.ajax.prototype.success.call(this, response, status);
  }
  Drupal.testAjax.error = function (response, uri) {
            console.log("Error");

    Drupal.testAjax.enableForm(this.element.form);
    
    // Call original method with main functionality
    Drupal.ajax.prototype.error.call(this, response, uri);
  }

})(jQuery);
Jaypan的图片

这将工作,但它增加了额外的开销。使用ajax_command_()系列由Drupal的提供的功能需要较少的脚本,并有较少的开销,因为它不是在每一个AJAX命令调用就像上面的代码。


Drupal的机构已经关闭了在改善论坛讨论:https://www.drupal.org/node/2536122

现在是时候开始新的论坛,在其他地方。Drupal的组织不关心论坛。


d70rr3s的图片

就我而言,我的工作IEF模块,我需要用更新的设置被提交函数传递回执行JS函数(答案)(没有黑客IEF模块或过程),当你犯了一个CTA到发生形式或链接阿贾克斯你可以使用drupal_add_js功能和发送任何你可能需要回浏览器作为全球响应对象的面值,无需覆盖您以前的Ajax回调。

cesarpo的图片

对我来说,完美的和最快的解决方案

$( document ).ajaxStop(function() {
    // call your js code
});
Jaypan的图片

这是一个简单的解决方案,但要注意的代码将在网站上的每一个Ajax请求后执行 - 这可能会导致大量的开销。


Drupal的机构已经关闭了在改善论坛讨论:https://www.drupal.org/node/2536122

现在是时候开始新的论坛,在其他地方。Drupal的组织不关心论坛。

来自 https://www.drupal.org/node/1028410