Остановите поле ввода в форме от того, чтобы быть отправленным

Я пишу некоторый JavaScript (greasemonkey/userscript), который вставит некоторые поля ввода в форму на веб-сайте.

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

Есть ли некоторый способ, которым я мог добавить некоторые поля ввода в середину формы и не иметь их, отправил, когда форма отправлена?

Очевидно, идеальная вещь состояла бы в том, чтобы поля ввода не были в элементе формы, но я хочу, чтобы расположение моей получающейся страницы имело мои вставленные поля ввода, появляются между элементами исходной формы.

104
задан Acorn 9 June 2010 в 17:10
поделиться

5 ответов

Вы можете вставить поля ввода без атрибута name:

<input type="text" id="in-between" />

Или вы можете просто удалить их после отправки формы (в jQuery ):

$("form").submit(function() {
   $(this).children('#in-between').remove();
});
150
ответ дан 24 November 2019 в 04:08
поделиться

Проще всего вставить элементы с атрибутом disabled.

<input type="hidden" name="not_gonna_submit" disabled="disabled" value="invisible" />

Таким образом, вы сможете получить к ним доступ как к дочерним элементам формы.

Недостатком отключенных полей является то, что пользователь не может взаимодействовать с ними - так, если у вас есть отключенное текстовое поле, пользователь не сможет выбрать текст. Если у вас есть disabled чекбокс, пользователь не сможет изменить его состояние.

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

51
ответ дан 24 November 2019 в 04:08
поделиться

Обработайте отправку формы в функции через 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);
}

Это даст вам именно то, что вы ищете.

0
ответ дан 24 November 2019 в 04:08
поделиться

Вы можете написать обработчик события для 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;
8
ответ дан 24 November 2019 в 04:08
поделиться

Нужно ли вообще, чтобы они были элементами ввода? Вы можете использовать Javascript для динамического создания div'ов или параграфов, или элементов списка, или чего угодно, что содержит информацию, которую вы хотите представить.

Но если интерактивный элемент важен, и размещение этих элементов вне блока

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

0
ответ дан 24 November 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: