Исключение определенных входных данных для сериализации
Я пытаюсь исключить ввод по имени (это скрытый ввод, содержащий мой nonce)
Следующий вопрос - это почти то, что я ищу:
Как использовать форму jQuery form.serialize, но исключать пустые поля
но у меня есть 2 вопроса о решении там, где говорится, что для сериализации данных формы, кроме пустых входов и входов, где value = "."
$("#myForm :input[value][value!='.']").serialize();
в первую очередь, я не могу заставить его работать с переменной jquery "this"
$('#ofform').live('submit', function(e) {
e.preventDefault();
var serializedReturn = $(this :input[name!='security']).serialize();
});
И во-вторых, у меня есть отдельная форма с идентификатором формы reset, и если я использую:
var serializedReturn = $(#ofform :input[name!='security']).serialize();
он подбирает входы в другой форме формы <- > w70 > , и/ИЛИ, которые не заключены в тег.
нашел ответ в одном из моих предыдущих вопросов. неправильная разметка стиля:
<form id="ofform">
<div id="toolbar">
<button id="save">Save</button>
</form>
<form id="ofform-reset">
<button id="reset">Reset</button>
</form>
</div>
теперь, чтобы выяснить, как использовать 2 разных кнопки для управления одной и той же формой
Ответы
Ответ 1
Вам не нужен :
, потому что вход - это элемент, который не является псевдоселектором. Во-вторых, вы не можете использовать объект и текстовую строку в своем селекторе. Вместо этого вы должны указать это как аргумент области $()
:
$('#ofform').live('submit', function(e) {
e.preventDefault();
var serializedReturn = $('input[name!=security]', this).serialize();
});
Ответ 2
Сначала вам нужно вызвать метод .find()
, например:
var serializedReturn = $(this).find('input[name!=security]').serialize();
В противном случае полная строка войдет в механизм запросов css (Sizzle).
Во-вторых:
У меня есть другая форма с идентификатором ofform- reset, и если я использую:
Вам нужно изменить это. Это неверная разметка, чтобы иметь несколько идентификаторов. Если я понял, что вы здесь не так, первое решение также может помочь вам здесь, используя метод .find()
:
var serializedReturn = $('#ofform').find('input[name!=security]').serialize();
Ответ 3
В моей ситуации это работало нормально:
$("fieldset").not(".tasks-container").serialize()
Ответ 4
Я не доволен 'input[name!=security]'
, потому что он исключает все другие типы ввода, такие как select
,.. Вы можете добавить их вручную, но этот список только увеличивается с новыми тегами HTML. Таким образом, с каждым новым тегом ваш код снова нарушается.
Вот мое решение:
$form.find(':not(input[name=draft])').serialize()
или
$('form[name=expenses] :not(input[name=draft])').serialize()
Пространство очень важно во втором примере.
Ответ 5
Решено! Вы должны использовать данное решение, чтобы исключить поле ввода для сериализации.
Он проверил и решил мою проблему.
var formdata = $($("#myform")[0].elements).not("#field_id").serialize();
для нескольких полей вы можете использовать имя класса, чтобы исключить их.
var formdata = $($("#myform")[0].elements).not(".class_name").serialize();
Ответ 6
Вы можете отфильтровать массив результатов
var ignoreFields = ["_csrf"];
$('form')
.serializeArray()
.filter(function(val){
return ignoreFields.indexOf(val.name) === -1;
});
Или более короткий вариант
$('form').serializeArray().filter(val => ignoreFields.indexOf(val.name) === -1)