【问题标题】:How do I properly add an onchange attribute to a form field in Drupal 7如何正确地将 onchange 属性添加到 Drupal 7 中的表单字段
【发布时间】:2013-07-02 17:38:15
【问题描述】:

在我正在编码的模块中,我有这个代码:

        'SelectType' => array(
          '#type' => 'select',
          '#name' => 'dropdown',
          '#options' => drupal_map_assoc(array(
                        'Keyword-classic','Keyword-Encore','Reserves: Instructor',)),
          '#attributes' => array('id' => array('SelectType'),
                  'onchange' => "change_action('catalogsearch', this.selectedIndex)",
          ),
        ),

这会产生这个结果:

[...]
<select id="SelectType" 
    onchange="change_action(&#039;catalogsearch&#039;, this.selectedIndex)"
    name="dropdown" class="form-select">
[...]

我需要它来生成(在第三行输出 ' 而不是 '):

[...]
<select id="SelectType" style="float:left;" 
    onchange="change_action('catalogsearch', this.selectedIndex)"
    name="dropdown" class="form-select">
[...]

我需要进行哪些更改才能使其正常工作?

【问题讨论】:

    标签: javascript drupal-7 drupal-forms drupal-render


    【解决方案1】:

    你可以试试这个:

        'SelectType' => array(
          '#type' => 'select',
          '#name' => 'dropdown',
          '#options' => drupal_map_assoc(array(
                        'Keyword-classic','Keyword-Encore','Reserves: Instructor',)),
          '#attributes' => array('id' => array('SelectType'),
                  'onchange' => 'change_action(\'catalogsearch\', this.selectedIndex)',
          ),
        ),
    

    顺便说一句,由于ID 是唯一的,并且一次只能对一个元素使用一个,因此您应该使用'id' =&gt; 'SelectType' 而不是'id' =&gt; array('SelectType')

    编辑:

    如果上面的代码不起作用,那么您可以使用jQuery,如下所示:

    $("#SelectType").change(function() { 
        YOUR CODE.....
    });
    

    【讨论】:

    • 感谢您的及时答复。不幸的是,我尝试使用 \' 并得到了相同的结果。
    • ,您更新的答案有同样的问题...drupal 不喜欢在 onchange 中传递引用的值。这就是为什么您必须通过 drupal_add_js 设置变量,然后在您的 js 中使用该变量。
    【解决方案2】:

    我刚刚找到了执行此操作的“Drupal”方式。

    第 1 步,使用 drupal_add_js 设置一个包含下拉列表的变量:

    drupal_add_js(array('mymodule' => array('varname' => 'catalogsearch')), 'setting');
    

    第 2 步,添加 'onchange' 行为

    'onchange' => 'change_action(Drupal.settings.mymodule.varname, this.selectedIndex)'
    

    通过这样做,传递变量而不需要通过主题系统传递'。主题系统总是在属性值上调用check_plain,因此'\'总是被转换为&amp;#039;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 2023-04-08
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      相关资源
      最近更新 更多