Я пишу некоторый JavaScript (greasemonkey/userscript), который вставит некоторые поля ввода в форму на веб-сайте.
Вещь, я не хочу, чтобы те поля ввода влияли на форму всегда, я не хочу, чтобы они были отправлены, когда форма отправлена, я только хочу, чтобы мой JavaScript имел доступ к их значениям.
Есть ли некоторый способ, которым я мог добавить некоторые поля ввода в середину формы и не иметь их, отправил, когда форма отправлена?
Очевидно, идеальная вещь состояла бы в том, чтобы поля ввода не были в элементе формы, но я хочу, чтобы расположение моей получающейся страницы имело мои вставленные поля ввода, появляются между элементами исходной формы.
Вы можете вставить поля ввода без атрибута name:
<input type="text" id="in-between" />
Или вы можете просто удалить их после отправки формы (в jQuery
):
$("form").submit(function() {
$(this).children('#in-between').remove();
});
Проще всего вставить элементы с атрибутом disabled
.
<input type="hidden" name="not_gonna_submit" disabled="disabled" value="invisible" />
Таким образом, вы сможете получить к ним доступ как к дочерним элементам формы.
Недостатком отключенных полей является то, что пользователь не может взаимодействовать с ними - так, если у вас есть отключенное
текстовое поле, пользователь не сможет выбрать текст. Если у вас есть disabled
чекбокс, пользователь не сможет изменить его состояние.
Вы также можете написать javascript, который будет срабатывать при отправке формы, чтобы удалить поля, которые вы не хотите отправлять.
Обработайте отправку формы в функции через onSubmit () и выполните что-то вроде ниже, чтобы удалить элемент формы:
Используйте getElementById ()
модели DOM, затем с помощью [object] .parentNode.removeChild ([object])
предположим, что ваше поле имеет атрибут id "my_removable_field" code:
var remEl = document.getElementById("my_removable_field");
if ( remEl.parentNode && remEl.parentNode.removeChild ) {
remEl.parentNode.removeChild(remEl);
}
Это даст вам именно то, что вы ищете.
Вы можете написать обработчик события для onsubmit
, который удаляет атрибут name
из всех полей ввода, которые вы хотите не включать в отправку формы.
Вот быстрый непроверенный пример:
var noSubmitElements = [ 'someFormElementID1', 'someFormElementID2' ]; //...
function submitForm() {
for( var i = 0, j = noSubmitElements.length; i < j; i++ ) {
document.getElementById(noSubmitElements[i]).removeAttribute('name');
}
}
form.onsubmit = submitForm;
Нужно ли вообще, чтобы они были элементами ввода? Вы можете использовать Javascript для динамического создания div'ов или параграфов, или элементов списка, или чего угодно, что содержит информацию, которую вы хотите представить.
Но если интерактивный элемент важен, и размещение этих элементов вне блока является мучением, то должна быть возможность удалить эти элементы из формы, когда страница будет отправлена.