Я просматривал документы jQuery и думаю, что мы можем сделать это в одной строке, используя селекторы :
$("#myForm :input[value!='']").serialize() // does the job!
Очевидно #myForm получает элемент с идентификатором «Myform» , но то , что было менее очевидным для меня в первый том , что символ пробела необходимо между #myForm и: вход , как это потомок оператора.
: input соответствует всем элементам input, textarea, select и button.
[value! = ''] - атрибут не равен фильтру. Странная (и полезная) вещь заключается в том, что все: типы входных элементов имеют атрибуты значений, даже для выбора, флажков и т. Д.
Наконец, чтобы также удалить входы, где значение было '.' (как указано в вопросе):
$("#myForm :input[value!=''][value!='.']").serialize()
В этом случае сопоставление, то есть размещение двух селекторов атрибутов рядом друг с другом , подразумевает AND. Использование запятой подразумевает ИЛИ. Извините, если это очевидно для специалистов по CSS!
[value]
соответствует любому элементу сvalue
присутствующим атрибутом , включая элементы с пустыми значениями (или без значений). Это связано с ошибкой в более ранних версиях jQuery, которая создавала несоответствие между некоторыми вариантамиinput[value]
и:input[value]
. Возьмем, например<input value="foo"><input value=""><input value><input>
,; ошибка проиллюстрирована на этой скрипке .$form.find(":input[value]")
- пустые поля не выбирались. Не сработало:$form.find(":input[value!='']")
- выбраны все поля. Надеюсь, это кому-то поможет. (jQuery 2.0.0)$form.find(":input[value]")
также работал у меня (jQuery 1.11.0)value
атрибут уже был там. Иначе он этого не узнал.value
это установлено программно, это не сработает (value
не будет существовать как атрибут HTML, но будет как атрибут данных на входе). В тех случаях, попробуйте следующее:$('#myForm :input').filter(function(i) { return ($(this).val().length != 0); }).serialize()
. РЕДАКТИРОВАТЬ: только что видел ответ Рича на тот же эффект.Мне не удалось заставить решение Тома работать (?), Но я смог сделать это, используя
.filter()
короткую функцию для определения пустых полей. Я использую jQuery 2.1.1.источник
:input
Селектор в основном выбирает все элементы управления формы. Выбирает все элементы ввода, текстовой области, выбора и кнопки». источникЭто работает для меня:
источник
!!
повторно набирает все на bool, вы можете попробовать в консоли.!!('test')
,!!(5)
,!!(0)
input
селектора нужно:input
включатьdata = $( "#my_form :input").filter(function () { return $(this).val() != ""; }).serialize();
Вы можете сделать это с помощью регулярного выражения ...
Тестовые случаи:
источник
Я использовал вышеуказанное решение, но для меня это не сработало. Итак, я использовал следующий код
Может быть кому-то полезно
источник
Я бы посмотрел исходный код jQuery. В последней версии строка 3287.
Я мог бы добавить функции "serialize2" и "serializeArray2". конечно назовите их чем-нибудь подлым.
Или лучше было бы написать что-нибудь, чтобы вытащить неиспользуемые вары из serializedFormStr. Некоторое регулярное выражение, которое ищет = & в середине строки или заканчивается на = Любые мастера регулярных выражений?
ОБНОВЛЕНИЕ: мне больше нравится ответ rogeriopvl (+1) ... тем более, что я не могу найти никаких хороших инструментов регулярного выражения прямо сейчас.
источник
Альтернатива решению Рича :
Пояснения:
.submit()
подключается кsubmit
событию формыe.preventDefault()
предотвращает отправку формы.serializeArray()
дает нам представление в виде массива строки запроса, которая должна была быть отправлена..filter()
удаляет ложные (включая пустые) значения в этом массиве.$.param(query)
создает сериализованное и совместимое с URL-адресом представление нашего обновленного массиваwindow.location.href
отправки запросаисточник
В coffeescript сделайте следующее:
источник
Возможно, вы захотите взглянуть на функцию jquery .each (), которая позволяет вам перебирать каждый элемент селектора, поэтому таким образом вы можете проверить каждое поле ввода и посмотреть, пусто оно или нет, а затем удалить его из формы используя element.remove (). После этого вы можете сериализовать форму.
источник