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