2011-09-28 9 views
10

Próbując serializacji tylko elementy z określonej tabeli, ale to tylko zwraca wynik, jeśli zrobić cały Formserialize z elementu tablicy, a nie cała forma

w poniższym kodzie chcę ajax tylko elementy 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> 

kod

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

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

Odpowiedz

17

Przede wszystkim, o <table> nie może mieć atrybut name, a nawet jeśli mógł, jQuery ID selector (#) nie pasowałoby do tego.

Jeśli używasz id zamiast (<table id="tbl2">), to będzie działać tak:

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

Selektor :input wybiera wszystkie elementy postaci (tutaj, wewnątrz #tbl2), jest ona potrzebna, ponieważ serialize() będzie działać tylko na te.

Proszę również sprawdzić mój jsFiddle Demo.

+0

czy to nie działa? '$ (tableID) .seralize()' ?? – Deeptechtons

+0

@Deeptechtons Możesz go wypróbować w skrzypcach, które napisałem, ale zapewniam cię, że to nie zadziała. – kapa

+1

Rzeczywiście mam identyfikator w moim kodzie, musiałem błędnie umieścić w nazwie, gdy napisałem kod w tym pytaniu. Przepraszam. – Christian

1

Nie można serialize tabeli - ta metoda nie ma zastosowania do tego rodzaju obiektu DOM, tylko formularze i pola formularzy mogą być serializowane.

Jeśli naprawdę chcesz robić to, co proponujesz, potrzebujesz odpowiedniego selektora, aby wybrać tylko dzieci z tbl2, które są również elementami formularza, a następnie będziesz musiał serializować je ręcznie. ktoś zrobił to w innym pytaniu, tutaj: serialize without a form?

lepszym sposobem może być wyłączenie wszystkich elementów formularza, które NIE są w tabeli, którą jesteś zainteresowany - będziesz potrzebował selektora do wybrania wszystkich elementów formularza, które nie są elementami potomnymi tbl2 - a NASTĘPNIE serializują formularz. wyłączone elementy zostaną pominięte.

+0

Nie sądzę, że wyłączenie elementów formularza będzie blisko "lepszego sposobu". – kapa

1

można użyć metody serializeArray, która da tablicę pól wejściowych i może być używana z danymi.

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

Należy pamiętać, że twój selektor będzie pasował tylko do '' elementów i nie będzie pasował do innych możliwych elementów formularza, takich jak '