Собcтвенно, если создаем кнопку программно - у нас есть два варианта: типы button и submit. Нажатие на любую из них приводит к отправке формы, в которой эта кнопка.
Как сделать кнопку, которая не отправляет форму - мне нужно навесить на неё JS -функции, и чтобы форма оставалась.
Комментарии
https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault
не очень понятно, причем тут ссылка. Чекбокс не устраивает, чекбокс и так понятно как создатьа, через JS , через preventDefault запретить отправку формы. А нет менее костыльного решения? А то в JS и так можно кнопку создать пустую - так и проще будет вроде, а вопрос был про form API и что-нить более простое, без jquery
PS как я понял preventDefault предотвращает клики и реакцию на них? Нет, клик должен как раз проходить, на него и нужно забиндить событие, но чтобы форма не отправилась
Ссылка для ознакомления с матчастью. Чекбокс - для примера, Вы должны быть в состоянии спроецировать полученную информацию на свой кейс.
Это и есть "менее костыльное решение". То что описываете Вы (элемент для кнопки, отличный от кнопки, при этом выглядящий и действующий как кнопка) - это костыль.
То что делается с помощью prevenDefault - соответствует принципам "прогрессивной деградации". При отключенном JS должна отрабатывать обычная кнопка формы, а при включеном - все отрабатывает AJAX'ом, к примеру.
Объясните, каким боком и зачем, в Drupal Form API должны быть инструменты, которые для Drupal не предназначены? (надеюсь про то что Drupal - инструмент, работающий на сервере, а не на клиенте, объяснять не нужно).
prevenDefault - предотвращает выполнение действия по-умолчанию. В данном случае, отправку формы.
prevenDefault должен вызываться на событии, на которое Вы забиндились:
event.preventDefault(); // Отключаете стандартную реакцию
// .. Дальше реализуете свою логику
}
...
return false;
});
Можете через #prefix/#suffix добавить любой элемент и навесить на него js. Мануалов в инете тьма...
Неправильно поняли. preventDefault, как следует из названия, предотвращает поведение по умолчанию (после клика)
то есть без JS такое не провернуть, ясно. Всем спасибо за советы, посмотрим какой всех лучше подойдет