Ответ 1
Вы можете вставить поля ввода без атрибута "name":
<input type="text" id="in-between" />
Или вы можете просто удалить их после отправки формы (в jQuery
):
$("form").submit(function() {
$(this).children('#in-between').remove();
});
Я пишу 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
, пользователь не может выбрать текст. Если у вас установлен флажок disabled
, пользователь не может изменить свое состояние.
Вы также можете написать javascript для записи в форме, чтобы удалить поля, которые вы не хотите отправлять.
Простая попытка удалить атрибут name из элемента ввода.
Поэтому он должен выглядеть как
<input type="checkbox" checked="" id="class_box_2" value="2">
Я просто хотел добавить дополнительную опцию: на вашем входе добавьте тег формы и укажите имя формы, которая не существует на вашей странице:
<input form="fakeForm" type="text" readonly value="random value" />
Вы можете написать обработчик событий для 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;
Добавьте disabled = "disabled" во входные данные, и если jquery отключить атрибут, если вы хотите отправить его, используя .removeAttr('disabled')
HTML:
<input type="hidden" name="test" value="test" disabled='disabled'/>
JQuery
$("input[name='test']").removeAttr('disabled');
Я знаю, что этот пост древний, но я все равно отвечу. Самый простой/лучший способ, который я нашел, - просто просто указать имя пустым.
Поместите это перед отправкой:
document.getElementById("TheInputsIdHere").name = "";
В целом ваша функция отправки может выглядеть так:
document.getElementById("TheInputsIdHere").name = "";
document.getElementById("TheFormsIdHere").submit();
Это все равно отправит форму со всеми вашими другими полями, но не представит ее без имени.
Обработайте форму submit в функции через onSubmit() и выполните что-то вроде ниже, чтобы удалить элемент формы:
Используйте getElementById()
для DOM, затем используя [object].parentNode.removeChild([object])
предположим, что ваше поле имеет атрибут id "my_removable_field" код:
var remEl = document.getElementById("my_removable_field");
if ( remEl.parentNode && remEl.parentNode.removeChild ) {
remEl.parentNode.removeChild(remEl);
}
Это даст вам именно то, что вы ищете.
Вам даже нужны, чтобы они были элементами ввода в первую очередь? Вы можете использовать Javascript для динамического создания разделов или абзацев или элементов списка или любого другого, содержащего информацию, которую вы хотите представить.
Но если интерактивный элемент важен, и это боль в прикладе, чтобы поместить эти элементы вне блока <form>
, должно быть возможно удалить эти элементы из формы, когда страница будет отправлена.
$('#serialize').click(function () {
$('#out').text(
$('form').serialize()
);
});
$('#exclude').change(function () {
if ($(this).is(':checked')) {
$('[name=age]').attr('form', 'fake-form-id');
} else {
$('[name=age]').removeAttr('form');
}
$('#serialize').click();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="/">
<input type="text" value="John" name="name">
<input type="number" value="100" name="age">
</form>
<input type="button" value="serialize" id="serialize">
<label for="exclude">
<input type="checkbox" value="exclude age" id="exclude">
exlude age
</label>
<pre id="out"></pre>
Вам нужно добавить onsubmit в вашу форму:
<form action="YOUR_URL" method="post" accept-charset="utf-8" onsubmit="return validateRegisterForm();">
И script будет выглядеть следующим образом:
function validateRegisterForm(){
if(SOMETHING IS WRONG)
{
alert("validation failed");
event.preventDefault();
return false;
}else{
alert("validations passed");
return true;
}
}
Это работает для меня каждый раз:)