Создать кнопку через FormAPI, которая не отправляет форму

Главные вкладки

Аватар пользователя remmor remmor 31 октября 2019 в 14:03

Собcтвенно, если создаем кнопку программно - у нас есть два варианта: типы button и submit. Нажатие на любую из них приводит к отправке формы, в которой эта кнопка.
Как сделать кнопку, которая не отправляет форму - мне нужно навесить на неё JS -функции, и чтобы форма оставалась.

Комментарии

Аватар пользователя remmor remmor 31 октября 2019 в 16:13

не очень понятно, причем тут ссылка. Чекбокс не устраивает, чекбокс и так понятно как создать

а, через JS , через preventDefault запретить отправку формы. А нет менее костыльного решения? А то в JS и так можно кнопку создать пустую - так и проще будет вроде, а вопрос был про form API и что-нить более простое, без jquery

PS как я понял preventDefault предотвращает клики и реакцию на них? Нет, клик должен как раз проходить, на него и нужно забиндить событие, но чтобы форма не отправилась

Аватар пользователя bumble bumble 31 октября 2019 в 17:03

не очень понятно, причем тут ссылка. Чекбокс не устраивает, чекбокс и так понятно как создать

Ссылка для ознакомления с матчастью. Чекбокс - для примера, Вы должны быть в состоянии спроецировать полученную информацию на свой кейс.

А нет менее костыльного решения?

Это и есть "менее костыльное решение". То что описываете Вы (элемент для кнопки, отличный от кнопки, при этом выглядящий и действующий как кнопка) - это костыль.

То что делается с помощью prevenDefault - соответствует принципам "прогрессивной деградации". При отключенном JS должна отрабатывать обычная кнопка формы, а при включеном - все отрабатывает AJAX'ом, к примеру.

а вопрос был про form API

Объясните, каким боком и зачем, в Drupal Form API должны быть инструменты, которые для Drupal не предназначены? (надеюсь про то что Drupal - инструмент, работающий на сервере, а не на клиенте, объяснять не нужно).

как я понял preventDefault предотвращает клики и реакцию на них?

prevenDefault - предотвращает выполнение действия по-умолчанию. В данном случае, отправку формы.

Нет, клик должен как раз проходить, на него и нужно забиндить событие, но чтобы форма не отправилась

prevenDefault должен вызываться на событии, на которое Вы забиндились:

function myCallbackForTheSubmit(event) {
    event.preventDefault(); // Отключаете стандартную реакцию
 
    // .. Дальше реализуете свою логику
}
Аватар пользователя ivnish ivnish 31 октября 2019 в 16:19

PS как я понял preventDefault предотвращает клики и реакцию на них?

Неправильно поняли. preventDefault, как следует из названия, предотвращает поведение по умолчанию (после клика)

Аватар пользователя remmor remmor 31 октября 2019 в 16:33

то есть без JS такое не провернуть, ясно. Всем спасибо за советы, посмотрим какой всех лучше подойдет