jQuery form serialize - порожній рядок


95

Мій html:

 <script type="text/javascript">

    $(function() {

        $("#bt1").click(function() {

            var f = $("#form1");
            var formData = f.serialize();

            alert(formData);
        });

    }); 
</script> 

 <div id="div1">
      <form id="form1" action="/Home/Test1" method="post" name="down">
        <div id="div2">
            <input id="input1" type="text" value="2" />
        </div>    
      </form>
  </div>

 <input type="submit" id="bt1" />

Коли я запускаю подію клацання, formData порожня. Я використовую jQuery 1.4.2.

Відповіді:


214

Ви повинні дати inputелементу ім’я. Наприклад:

<form id="form1" action="/Home/Test1" method="post" name="down">
    <div id="div2">
        <input id="input1" type="text" value="2" name="foo"/>
    </div>    
</form>

дасть вам у вікні сповіщення foo=2.

.serialize()приймає ім'я та значення полів форми і створює рядок типу name1=value1&name2=value2. Без імені він не може створити такий рядок.

Зверніть увагу, що nameце щось інше, ніж id. Ваша форма також не працювала б, якби ви використовували її "звичайним" способом. Кожне поле форми потребує імені.


1
чи необхідні ідентифікатори для серіалізації форми до речі?
Vic

Дозвольте запропонувати включити сюди відповідь Медбрекса.
Слов’ян

У мене є ім’я, але я все ще маю порожній рядок, коли серіалізація мого подання є колекцією, тому імена, наприклад, [0] .Unit, [0]. Валюта
Marc Roussel

Відповідь нижче допомогла мені ... переконайтеся, що ваші входи НЕ ВИМКНЕНІ!
звукова смуга

82

Хоча це не стосується цього конкретного прикладу, однакова поведінка трапляється, якщо є один або кілька входів форми disabled. Ці входи не відображатимуться в серіалізованому рядку. У моєму випадку всі входи форми мали значення, але були відключені, в результаті чого повертався порожній рядок.


4
Це неприємно. Хотів вимкнути поля, поки я надсилаю пошту в стилі ajax, і робив це перед серіалізацією форми ...
Даніель Ленг,

1
Боже мій, це було питання, яке зводило мене з розуму. +1 людина, будь-який спосіб змусити його працювати на відключених елементах?
Noitidart

@Noitidart Ви можете написати власне serializeрозширення jQuery, яке перебирає входи та включає відключені. Але це неможливо зробити, наскільки мені відомо, за допомогою нестандартного jQuery.
Madbreaks

Має сенс не включати відключені елементи, оскільки відключені елементи не повинні містити введення користувачем.
Дженні О'Райлі

2
@ JennyO'Reilly Звичайно, але відсутність вводу користувача не означає "не має значення".
Madbreaks

10

У nameвхідних даних немає атрибута ..., що може бути проблемою для серіалізації.

<input id="input1" type="text" value="2" name="input1" />

Людина. Ти такий рятівник життя !! Дякую.
Анжана Сільва

6

Також переконайтеся, що на сторінці немає 2 елементів з однаковим ідентифікатором.


3
Це коментар, а не відповідь на запитання. Будь ласка, використовуйте коментарі надалі. Дякую :)
Пропало кодування
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.