бумажная кнопка с типом = отправить в форме не отправляется?

Я пытаюсь использовать paper-button с атрибутом type, установленным на submit (как и с элементом button), чтобы отправить вложенный form, но по какой-то причине он не может отправить форму. Это баг или фича?

Как заставить paper-button отправить форму?

PS: я нахожусь в стране дротиков (не js).


person adarshaj    schedule 21.07.2014    source источник


Ответы (4)


Как заметил Гюнтер, вы можете создать пользовательский элемент, который расширяет некоторые нативные элементы с желаемой семантикой.

Я тоже столкнулся с вашей проблемой, и я создал простой элемент, который дает возможность отправить paper-button

<polymer-element name="paper-button-submit" extends="button" noscript>
  <template>
    <style>
      :host {
        border: 0;
        background: transparent;
        padding: 0;
        font-size: inherit;
      }
    </style>
    <paper-button>
      <content></content>
    </paper-button>
  </template>
</polymer-element>

Тогда вы можете написать это

<button type="submit" is="paper-button-submit">Add</button>

И получится кнопка с бумажным видом

person just-boris    schedule 16.11.2014
comment
Я использую полимер на Javascript, но я считаю, что он может работать и в Dart. - person just-boris; 16.11.2014
comment
Это прекрасно работает в Dart и не требует дополнительного кода дротика. Я решил назвать компонент paper-native-button, потому что на самом деле он ничего не определяет. submit - это происходит в момент использования (что более мощно). Это кажется довольно элегантным решением. - person hawkett; 23.02.2015
comment
На самом деле, я обнаружил, что мне нужно добавить какой-то вспомогательный скрипт для передачи атрибутов кнопки, таких как «поднятый». Суть с изменениями/дополнениями: gist.github.com/hawkett/49146a43d8595aa6c468 — 3 вещи, на которые следует обратить внимание. - удалить атрибут 'noscript' (mobilemancer .com/2015/01/06/), сделали наследование шрифтов более полным и добавили скрипт для поддержки атрибута 'raised'. - person hawkett; 23.02.2015
comment
Я бы хотел передать такие атрибуты, как disabled, raised и z, бумажной кнопке. без помощи дротика. Если кто доберется до меня, поделитесь! - person morgs32; 25.02.2015

Вы можете добиться отправки формы, поместив собственную кнопку внутри элемента paper-button:

<paper-button>
  <button>Sign Up</button>
</paper-button>

Затем используйте следующий CSS, чтобы скрыть нативную кнопку, убедившись, что ее хитзона заполняет весь элемент бумажной кнопки:

<style shim-shadowdom>
  paper-button {
    padding:0;
  }
  paper-button::shadow .button-content {
    padding:0;
  }
  paper-button button {
    padding:1em;
    background-color: transparent;
    border-color: transparent;
  }
  paper-button button::-moz-focus-inner {
    border: 0;
  }
</style>
person Derrick    schedule 25.12.2014

Уже обсуждалось использование элементов Polymer, содержащих элементы формы в форме в группе Polymer Google, и, насколько я помню, я ответил на аналогичный вопрос здесь, на SO (после этого я проведу некоторое исследование).

1) Вы можете расширить элемент ввода

<polymer-element name="my-element" extends="input">
   ...
</polymer-element>

и использовать его как

<input is="my-element">

2) Вы можете выполнять обработку формы в пользовательском коде
(считывать значения из элементов формы и создавать вызов AJAX для отправки данных на сервер).

3) Создайте пользовательский элемент формы (расширяет второй)
, который выполняет обработку формы и вызов AJAX.

Первый вариант неприменим к основным элементам/бумажным элементам, поскольку они не расширяют <input> (или любой другой элемент формы), а встраивают его. Это относится к элементам ввода формы, а также к кнопке отправки формы.

Несколько более-менее связанных тем

Что вы можете сделать, если только кнопка отправки является полимерным элементом, так это вызвать метод click() для невидимой (не полимерной) кнопки отправки в обработчике кликов <paper-button>. Подробнее см.
- Polymer: отправка формы вручную

person Günter Zöchbauer    schedule 21.07.2014
comment
Спасибо за исчерпывающий список вариантов, но, к сожалению, это все еще не отвечает на мой первоначальный вопрос. Я подожду еще некоторое время, чтобы увидеть, есть ли обходной путь, чтобы отправить нативную форму через бумажную кнопку. - person adarshaj; 21.07.2014
comment
Пока ничего не планируется, может быть вам придется очень долго ждать. Я думаю, вам просто нужно выполнить обработку отправки «вручную», как показано в сообщении в блоге Сета. - person Günter Zöchbauer; 21.07.2014
comment
Чтобы было ясно, проект paper-forms для Polymer JS уже находится в стадии реализации. - person Scott Miles; 21.07.2014
comment
@ScottMiles Приятно слышать! Пока не видел, чтобы это где-то упоминалось. - person Günter Zöchbauer; 22.07.2014
comment
Похоже, что единственный способ легко отправить эти настраиваемые поля формы — это ajax-form. Это то, что рекомендует команда Polymer. Отказ от ответственности: я автор ajax-формы. - person Ray Nicholus; 23.11.2014
comment
@ScottMiles Источник об этом? - person jrajav; 10.12.2014

Нет необходимости создавать пользовательский элемент. В соответствии с документами рекомендуется следующий подход:

<paper-button raised onclick="submitForm()">Submit</paper-button>
function submitForm() {
  document.getElementById('form').submit();
}

поэтому вы просто привязываете событие onclick к функции, которая вручную отправляет вашу форму.

ОБНОВЛЕНИЕ

Хотя в предыдущем примере из iron-form используется событие onclick, рекомендуется используйте on-tap вместо on-click:

Совет: используйте on-tap, а не on-click для события, которое последовательно срабатывает как на сенсорных (мобильных), так и на кликовых (настольных) устройствах.

Также рекомендуется использовать собственный DOM полимеров. API:

function submitForm(e) {
  Polymer.dom(e).localTarget.parentElement.submit();
}
person Yan Foto    schedule 02.03.2016