Бумажная кнопка с типом = "отправить" в форму не отправляет?
Я пытаюсь использовать paper-button
с атрибутом type
, установленным в submit
(как и с элементом button
), чтобы отправить прилагаемый form
, но по какой-то причине он не может отправить форма. Это ошибка или функция?
Как сделать paper-button
отправить форму?
PS: Я нахожусь в землянке (не js).
Ответы
Ответ 1
Как заметил Гюнтер, вы можете создать пользовательский элемент, который расширяет часть собственного элемента с помощью вашей желаемой семантики.
Я тоже столкнулся с вашей проблемой, и я создал простой элемент, который дает возможность отправлять 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>
И получится кнопка с бумажным видом
Ответ 2
Вы можете получить форму отправки, поместив встроенную кнопку внутри элемента кнопки:
<paper-button>
<button>Sign Up</button>
</paper-button>
Затем используйте следующий CSS, чтобы скрыть встроенную кнопку, гарантируя, что hitzone заполнит весь элемент кнопки:
<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>
Ответ 3
Уже было обсуждено использование полимерных элементов, содержащих элементы формы в форме в группе Polymer Google, и, насколько я помню, я ответил на аналогичный вопрос здесь, на SO (я сделаю некоторое исследование впоследствии).
1) Вы можете расширить элемент ввода
<polymer-element name="my-element" extends="input">
...
</polymer-element>
и используйте его как
<input is="my-element">
2) Вы можете выполнить обработку формы в пользовательском коде
(прочитайте значения из элементов формы и создайте вызов AJAX для отправки данных на сервер)
3) Создайте пользовательский элемент формы (расширяет второй)
который обрабатывает форму и вызов AJAX
Первая опция не применима к элементам core-elments/paper, потому что они не расширяют <input>
(или любой другой элемент формы), а вставляют его.
Это относится к элементам ввода формы, а также к кнопке отправки формы.
Некоторые более или менее связанные темы
Что вы можете сделать, если только кнопка отправки является элементом Polymer, вызывается метод click()
на невидимой (неполимерной) кнопке отправки в обработчике кликов <paper-button>
подробнее см.
- Полимер: вручную отправляет форму
Ответ 4
Нет необходимости создавать пользовательский элемент. В соответствии с docs рекомендуется следующее apporach:
<paper-button raised onclick="submitForm()">Submit</paper-button>
function submitForm() {
document.getElementById('form').submit();
}
поэтому вы просто привязываете событие onclick
к функции, которая вручную отправляет вашу форму.
UPDATE
Хотя в предыдущем примере из iron-form
используется onclick
событие рекомендуется использовать on-tap
над on-click
:
Совет. Используйте on-tap
вместо on-click
для события, которое срабатывает последовательно на обоих сенсорных (мобильных) и нажимаемых (настольных) устройствах.
Также неплохо использовать Полимеры собственный DOM API:
function submitForm(e) {
Polymer.dom(e).localTarget.parentElement.submit();
}