我确信这对 jQuery 专家来说很简单,但我是一名后端人员,找不到执行此操作的最佳方法。我在 Drupal 中有两个数组,一个是 View 名称列表,另一个是包含每个 View 的显示列表的数组。下面是填充两个数组的代码:
//load list of views in to array for select lists
$views = views_get_all_views();
$viewnames = array();
$viewdisplays = array();
foreach ($views as $view) {
$viewnames[$view->name] = $view->name;
foreach ($view->display as $k) {
$id = $k->id;
$title = $k->display_title;
$viewdisplays[$view->name]['id'] = $id;
$viewdisplays[$view->name]['title'] = $title;
}
}
这是我正在使用的表单的片段:
$form['view'] = array(
'#type' => 'select',
'#title' => t('Select the view to be used for display'),
'#options' => $viewnames,
);
$form['view_display'] = array(
'#type' => 'select',
'#title' => t('Select the display of the gallery view to be used'),
'#options' => array(),
);
我想做的是用适当的值动态填充 view_display 选择框。如果用户从“ View ”选择中选择了“我最喜欢的 View ”,我想将 $viewdisplays['My Favorite View'] 数组显示为“view_display”字段的#options。
最佳答案
做到你所要求的并不难。
Drupal 知道选择的表单项有哪些选项,因为它保留了表单的副本。因此,您需要使用它可以拥有的所有选项来预填充要更改的选择的选项。您还需要确保它们的值是唯一的,这样您就不会得到这样的数组:
array( 1 => 'a-a', 2 => 'a-b', 3 => 'a-c', 4 => 'a-d', 1 => 'b-a', 2 => 'b-b', )
- 现在你有两个选择
- 您使用
将每个 View 的选项发送到javascriptdrupal_add_js($array, 'setting')
.这会将$array
添加到Drupal.settings
变量。 - 您可以通过 AJAX 获取选项。在这种情况下,您必须使用
hook_menu
创建一个菜单项。 .
- 您使用
现在您只需要对 View 选择中的更改使用react,并相应地添加它们的选项,从 ajax 调用或 js 变量中获取它们。我建议使用变量方法。这可能看起来像这样:
$("#edit-view").change(function(){ $("#edit-view_display").html(Drupal.settings.myVariable[$(this).val()]); }).change();
您需要将此 js 添加到您的表单中。您可以将它放在一个 js 文件中,将其包装在
$(document).ready
中,然后使用drupal_add_js
添加它
关于javascript - 表单上的 Drupal 动态选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388436/