Функция сериализации jQuery с множественными формами - PullRequest
1 голос
/ 10 ноября 2009

Я использую функцию jQuery .serialize и не могу заставить ее сериализовать правильную форму при отправке.

мой код JS:

    function getquerystring(form) {
    return $("form").serialize();
}

мои формы:

<div class="leave_message_box">
    <form name="leave_message_form">
        <input type="text" name="clock_code" placeholder="Clock Code" />
    <input type="text" name="message" placeholder="Message (Blank for none)"/>
    <input type="hidden" name="type" value="leave_message" />
        <input value="Leave Message" type="button" onclick='JavaScript:xmlhttpPost("clockin.php", "leave_message_form")'></p>
    </form>
</div>
<div class="outside_job_box">
    <form name="outside_job_form">
        <input type="text" name="clock_code" placeholder="Clock Code" />
    <input type="text" name="message" placeholder="Message (Blank for none)"/>
    <input type="hidden" name="type" value="ouside_job" />
        <input value="Outside Job" type="button" onclick='JavaScript:xmlhttpPost("clockin.php", "outside_job_form")'></p>
    </form>
</div>

Я, должно быть, что-то делал не так, передавая переменную. полный код @ pastie . Функция, которая у меня есть, работает, однако, она всегда является последней отправленной формой.

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

Используя этот код:

$("form")

найдет все элементы <form> в вашем документе.

Учитывая, что form является строкой, содержащей имя формы, вместо этого вам нужно:

$("form[name='" + form + "']")

Глядя на ваш предоставленный код, у меня есть это предложение. Вместо того, чтобы передавать имя формы вашей функции, почему бы просто не передать саму форму?

<button onclick="xmlhttpPost('blah', this.form)">

Вам также не нужно указывать javascript: в свойствах onclick, onfocus, onwhatever.

0 голосов
/ 19 ноября 2011

Если единственной целью является кодирование простого текста в формат URL, тогда используйте encodeURIComponent () .

0 голосов
/ 10 ноября 2009

Я бы предложил поместить атрибут ID в форму, а затем использовать этот идентификатор в качестве явного селектора для jQuery:

<div class="outside_job_box">
  <form id="outside_job_form" name="outside_job_form">
      <input type="text" name="clock_code" placeholder="Clock Code" />
      <input type="text" name="message" placeholder="Message (Blank for none)"/>
      <input type="hidden" name="type" value="ouside_job" />
      <input value="Outside Job" type="button" onclick='JavaScript:xmlhttpPost("clockin.php", "outside_job_form")'></p>
  </form>
</div>

Тогда вы бы выбрали и сериализовали его так:

var f = $("#outside_job_form").serialize();

На мой взгляд, не только делает ваш код более эффективным, но и более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...