Подтвердить что ты не робот

Исключение определенных входных данных для сериализации

Я пытаюсь исключить ввод по имени (это скрытый ввод, содержащий мой 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 разных кнопки для управления одной и той же формой

4b9b3361

Ответ 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)