type='submit' в Bootstrap::ButtonDropdown

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
drlibra
Сообщения: 3
Зарегистрирован: 2016.08.29, 11:45

type='submit' в Bootstrap::ButtonDropdown

Сообщение drlibra »

Добрый день.

Кейс такой: есть форма редактирования, под ней отображается бутстраповский ButtonDropdown с текстом "Сохранить" и с выпадашкой с пунктами "Сохранить и редактировать" и "Сохранить и создать новую". Соответственно, в options для кнопки "Сохранить" прописано (для примера) name='form_button' и value='save', ну и соответственно type='submit'. Еще из важного: кнопка отображается с типом split, т.е. вот эта: http://getbootstrap.com/components/#btn-dropdowns-split

Если пользователь выбирает какое-то из значений в выпадашке, то значение value на кнопке "Сохранить" скриптом меняется на какое-то соответствующее (что-то типа save_edit или save_new) и форма сабмитится.

Проблема: т.к. ButtonDropdown рендерится в режиме split, то на самом деле отрисовываются две кнопки с почти идентичным набором опций, который берется из переданного options:

Код: Выделить всё

            $options = $this->options;
            $this->options['data-toggle'] = 'dropdown';
            Html::addCssClass($this->options, ['toggle' => 'dropdown-toggle']);
            unset($this->options['id']);
            $splitButton = Button::widget([
                'label' => '<span class="caret"></span>',
                'encodeLabel' => false,
                'options' => $this->options, <---- options передается в split кнопку
                'view' => $this->getView(),
            ]);
            <...>
            return Button::widget([
            'tagName' => $this->tagName,
            'label' => $label,
            'options' => $options, <----- options передается в кнопку с текстом
            'encodeLabel' => false,
            'view' => $this->getView(),
        ]) . "\n" . $splitButton; <------- аттачится split кнопка
Как я уже написал, в options указаны type, name и value. Поэтому при сабмите формы на самом деле отправляется value не из кнопки "Сохранить", а из кнопки, которая открывает выпадашку.

Обходной путь в общем понятен, например, на split-кнопке очищать name, но вызывает сомнение необходимость для кнопки, которая всего лишь открывает выпадашку, присваивать type и name. Может написать разработчикам с предложением исправления? Или так и задумывалось?

UPD Ну в общем-то подобное issue уже открыто: https://github.com/yiisoft/yii2-bootstrap/issues/108
Ответить