Сериализовать из элемента таблицы, а не всю форму

Попытка сериализовать только элементы из определенной таблицы, но возвращает результат только в том случае, если я делаю все Form

в приведенном ниже коде, я хочу ajax только элементы в tbl2

<form>
 <input type="text" id="tb1" name="tbl1"/>
  <table name="tbl1">
   <tr><td><input type="text" name="tb2"/></td></tr>
 </table>
 <table name="tbl2">
   <tr><td><input type="text" name="tb3"/></td></tr>
   <tr><td><input type="text" name="tb4"/></td></tr>
 </table>
</form>

код

var params = $("#tbl2").serialize();

var resp = $.ajax({
    async: false,
    type: "POST",
    url: AppRoot + "webhandlers/postback.ashx",
    data: params
});

Ответ 1

Прежде всего, <table> не может иметь атрибут name, и даже если бы он мог, jQuery ID селектор (#) не будет сравните его.

Если вместо этого вы используете id (<table id="tbl2">), он будет работать следующим образом:

var params = $("#tbl2 :input").serialize();

Селектор :input выбирает все элементы формы (здесь, внутри #tbl2), это необходимо, потому что serialize() будет работать только с ними.

Пожалуйста, также просмотрите мою jsFiddle Demo.

Ответ 2

вы не можете serialize таблицы - этот метод не применяется к этому типу объекта DOM, могут быть сериализованы только формы и поля формы.

Если вы действительно хотите делать то, что вы предлагаете, вам нужен правильный селектор, чтобы выбрать только дочерние элементы tbl2, которые также являются элементами формы, а затем вам придется сериализовать каждый из них вручную. кто-то сделал это в другом вопросе, здесь: сериализовать без формы?

лучшим способом может быть отключить все элементы формы, которые НЕ находятся в интересующей вас таблице - вам понадобится селектор для выбора всех элементов формы, которые не являются дочерними элементами tbl2 - и Затем сериализуйте форму. отключенные элементы будут опущены.

Ответ 3

вы можете использовать метод serializeArray, который даст вам массив полей ввода и может использоваться с данными.

var params = $("#tbl2 input").serializeArray();