【问题标题】:Ajax button not functioning in newly loaded form content - Drupal 7Ajax 按钮在新加载的表单内容中不起作用 - Drupal 7
【发布时间】:2012-04-06 08:17:44
【问题描述】:

我有一个模块,当用户点击一个链接时,我会在一个对话框中加载一个新表单,它有一个启用 Ajax 的提交按钮。在我的对话框中,我不希望显示整个 drupal 页眉和页脚等。我所展示的只是那个新表格的内容。所以我的表单是这样通过json输出的:

$json['html'] = drupal_render(drupal_get_form('my_form'));
drupal_json_output($json); 

如我所愿,只显示表单内容。但是,发生这种情况时,该表单中启用 ajax 的提交按钮不会通过 ajax 提交。相反,它像普通按钮一样提交并将我带到另一个页面上的相同表单。

如果我的表单正常输出和显示,带有页眉和页脚,如下所示:

$output = drupal_get_form('my_form');
return $output;

一切正常,我的提交按钮是“启用 ajax”。

我想,也许是因为我正在加载新内容,而行为没有附加到这些新表单内容上。所以在我的 js 文件中,我也这样做了:

$('a.my_link', context).click(function() {
//processing done here
$('#my_modal_dialog').html(jsondata['html']);
}, "json");
Drupal.attachBehaviors($('#my_modal_dialog'));

那个小小的补充,也没有解决问题。我想知道为什么,如果表单正常输出,按钮作为ajax按钮工作,而当只显示表单内容时,ajax不起作用。

希望有人能给出答案...在此先感谢。

【问题讨论】:

    标签: jquery ajax drupal


    【解决方案1】:

    我已经解决了这个问题,可以在以下链接中找到它:drupal.org/node/1517414

    【讨论】:

    • 也许您可以在此处重现该解决方案,因为该链接何时失效?
    【解决方案2】:

    我认为问题确实在于 javascript 没有应用于新内容,因为它在页面加载后运行一次。尝试使用live() 方法:

    $('a.my_link', context).live("click", function() {
      ...
    });
    

    请注意,从 jQuery 1.7 开始,live() 方法似乎已被弃用:http://api.jquery.com/live/

    好像已经被ondelegate方法替代了。

    【讨论】:

    • 我尝试使用 live() 和 on(),但都没有成功。我知道它必须与应用 Drupal.behaviors/settings 相关,其中行为/设置也将应用于新内容。我需要知道什么是正确的做法。
    【解决方案3】:

    请检查$ 是否替换为jQuery,也许这有帮助。

    【讨论】:

    • 使用$()应该没有问题
    • 我已经解决了这个问题,可以在以下链接中找到它:drupal.org/node/1517414
    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多