[РЕШЕНО] Изменение атрибутов select

Аватар пользователя nasferatu nasferatu 9 мая 2015 в 0:01

Есть поле field_name. Необходимо этому select добавить атрибут.
Добавляю через template.php

$form['field_name']['#attributes']['onchange'] = 'function'

то 'onchange' добавляется к div, но никак не к select. Объясните, где туплю.

Оно-то и к div-у прокатило бы, но стоит иерархический список, и скрипт срабатывает даже тогда, когда меняется родительский термин, чего не надо.

Комментарии

Аватар пользователя void void 9 мая 2015 в 0:29

Например на сабмит кнопку webform событие onclick вешается так: $form['actions']['submit']['#attributes']['onclick'] = "";

Аватар пользователя nasferatu nasferatu 9 мая 2015 в 9:54

Видимо до конца не досмотрел, в пределах значений field_name ничего об select не было. Буду смотреть дальше

ЗЫ. Все же капать нужно в пределах значение field_name

Аватар пользователя nasferatu nasferatu 9 мая 2015 в 10:59

так через хук и пытаюсь

на выходе получаю:

[field_name] => Array (
        [#type] => container
        [#attributes] => Array (
                [class] => Array (
                        [0] => field-type-taxonomy-term-reference
                        [1] => field-name-field_name
                        [2] => field-widget-taxonomy-hs
                )
        )
        [#weight] => 41
        [#tree] => 1
        [#language] => und
        [und] => Array (
                [#entity] => stdClass Object (
                        [uid] => 1
                        [name] => admin
                        [type] => type_application
                        [language] => und
                        [title] =>
                        [status] => 0
                        [promote] => 0
                        [sticky] => 0
                        [created] => 1431005138
                        [revision] =>
                        [comment] => 2
                        [menu] => Array (
                                [link_title] =>
                                [mlid] => 0
                                [plid] => 0
                                [menu_name] => main-menu
                                [weight] => 0
                                [options] => Array ( )
                                [module] => menu
                                [expanded] => 0
                                [hidden] => 0
                                [has_children] => 0
                                [customized] => 0
                                [parent_depth_limit] => 8
                        )
                )
                [#entity_type] => node
                [#bundle] => type_application
                [#field_name] => field_name
                [#language] => und
                [#field_parents] => Array ( )
                [#columns] => Array (
                        [0] => tid
                )
                [#title] => Имя
                [#description] =>
                [#required] => 1
                [#delta] => 0
                [#type] => hierarchical_select
                [#config] => Array (
                        [module] => hs_taxonomy
                        [params] => Array (
                                [vid] => 3
                                [exclude_tid] =>
                                [root_term] => 234
                                [entity_count_for_node_type] =>
                        )
                        [save_lineage] => 0
                        [enforce_deepest] => 0
                        [entity_count] => 0
                        [require_entity] => 0
                        [resizable] => 0
                        [level_labels] => Array (
                                [status] => 0
                                [labels] => Array (
                                        [0] =>
                                        [1] =>
                                        [2] =>
                                )
                        )
                        [dropbox] => Array (
                                [status] => 0
                                [title] => Все выборы
                                [limit] => 0
                                [reset_hs] => 1
                        )
                        [editability] => Array (
                                [status] => 0
                                [item_types] => Array (
                                        [0] =>
                                        [1] =>
                                        [2] =>
                                )
                                [allowed_levels] => Array (
                                        [0] => 1
                                        [1] => 1
                                        [2] => 1
                                )
                                [allow_new_levels] => 0
                                [max_levels] => 2
                        )
                        [animation_delay] => 400
                        [special_items] => Array ( )
                        [render_flat_select] => 0
                        [config_id] => taxonomy-field_name
                )
                [#default_value] => Array (
                        [0] => 136
                )
                [#process] => Array (
                        [0] => form_hierarchical_select_process
                        [1] => hs_taxonomy_widget_process
                )
                [#after_build] => Array (
                        [0] => field_form_element_after_build
                )
        )
        [#access] => 1
)

и вот куда здесь прописать дополнительный атрибут к селекту

Аватар пользователя nasferatu nasferatu 9 мая 2015 в 19:26

"imarat" wrote:
<?php $form['field_name']['und']['#attributes']['onchange'] = 'function'; ?>

пробовал этот вариант, тоже к диву добавляет.

Аватар пользователя sg85 sg85 9 мая 2015 в 19:58

Откройте код модуля hierarchical_select, в нем найдите темизацию theme_hierarchical_select и в нем Вы увидите, что хрен Вы ему добавите атрибуты(в смысле самому селекту), чтобы это сделать - Вам надо переопределить цепочку темизации hierarchical_select до того места, где Вам нужен класс, либо задать свою цепочку темизации и подсунуть её через hook_form, в случае, если такое нужно провернуть только в одной форме.
Хотя вклиниться можно еще через hook_process, и сделать все на этом уровне.

Правда я не совсем понимаю, зачем тратить несколько часов на геморрой с выводом hierarchical_select, когда можно просто за пару минут сделать это через js?

Аватар пользователя nasferatu nasferatu 10 мая 2015 в 12:17

Проблема в том, что в js не силен.
Пытаюсь через query:

jQuery(document).ready(function() {
        jQuery("select").change(function() {
                alert('1');
        });
});

Срабатывает только один раз и то на первый select.

Если:

jQuery(document).ready(function() {
        jQuery("#edit-field-name-und-hierarchical-select-selects-2").change(function() {
                alert('1');
        });
});

вообще не срабатывает.

Аватар пользователя nasferatu nasferatu 10 мая 2015 в 13:22

делать проверку по атрибуту selected, но в последнем селекте не зависимо от выбранного значения
<option value="label_2" class=" level-label" selected="selected"></option>

Аватар пользователя nasferatu nasferatu 12 мая 2015 в 10:21

все так и застрял на этом.
Видимо, легче отказаться от hs и просто сделать зависимые селекты, потому что после каждого изменения предыдущего селекта происходит перезагрузка этих селектов и меняются id (лечится обращением по имени), но слетают все присвоенные атрибуты.