通过AJAX的Drupal 7 + JS代码

问题描述:

我已经创建了几个模块来扩展FormAPI的UI元素。当我以正常方式(而不是AJAX)渲染表单时,这工作正常。但是,如果呈现的表单通过AJAX请求传递,则JS脚本通过$ .html函数插入代码。所以我不能通过由$ .html评估的脚本的ID来访问文档的元素。 是否有任何解决方案通过Form/Ajax API传递JavaScript代码?通过AJAX的Drupal 7 + JS代码

我认为jQuery(“#new-id”)(不是$(..))应该采用最新的dom元素。 您可以使用表格的API要么 'AJAX' 属性

$form['myitem'] = array(
'#type'=>'textfield', 
'#ajax' => array(
    'callback' => 'my_callback', 
    'wrapper' => 'new-id', 
    'method' => 'html', 
    'effect' => 'fade', 
), 
); 
$form['myitem2'] = array(
'#type'=>'markup', 
'#value'=>"<div id='new-id'> I'm #new-id </div>" 
); 


function my_callback(&$form, &$form_state){ 
    $commands = array(); 
    $commands[] = ajax_command_invoke('#new-id', 'html', array('<div id="new-id2">#new.id2 here!</div>')); 
    $commands[] = ajax_command_invoke('#new-id2', 'addClass', array('error')); 
    return array('#type' => 'ajax', '#commands' => $commands); 
} 

D7 ajax_commands: http://api.drupal.org/api/drupal/includes--ajax.inc/group/ajax_commands/7

希望这有助于

+0

是的,就是这样。但问题在于通过Dialog API调用jQuery(...)。html(...),它首先通过globalEval执行所有脚本,然后才将元素插入DOM。 – skayfar