2011-11-28 18 views
12

Chciałbym iterować przez formularz, dodając każdy element do obszaru. Problem polega na tym, że niektóre z tych elementów to select, input i textboxes. Wiem, że mogę użyć :input, aby rozwiązać problem tutaj (choć tak naprawdę nie muszę). Problem polega na tym, że mam problem z określeniem, w jaki sposób mogłem zobaczyć, czy element jest tekstowym, wejściowym, wybierz itd. Muszę to zrobić poprawnie, ponieważ, o ile mi wiadomo, jQuery("input#someinput").val() działa świetnie na dane wejściowe, ale dla textarea może potrzebować jQuery("textarea#sometexarea").text(). Nie jestem pewien, czy istnieje ...określanie wejścia vs textarea w jQuery

W każdym razie, oto moja funkcja do tej pory:

function getAllFormElements(id) { 

    var elements = new Array(); 

    jQuery(id).children().map(function(){ 

     for (var index = 0; index < children.length; index++) { 

      elements[i] = jQuery(children[i]).val(); 

     } 

    }) 

     return elements; 
} 

Odpowiedz

46

val() działa równie dobrze z <input>, <select> i <textarea> elementy.

Jeśli nadal chcesz, aby określić rzeczywisty typ elementów dopasowanych przez selektor :input, można użyć is() z element selectors:

$(":input").each(function() { 
    var $this = $(this); 
    if ($this.is("input")) { 
     // <input> element. 
    } else if ($this.is("select")) { 
     // <select> element. 
    } else if ($this.is("textarea")) { 
     // <textarea> element. 
    } 
}); 
+0

Idealny. Dokładnie to, czego potrzebowałem. Dziękuję Ci. – zeboidlund

+0

+1, fajne rozwiązanie "Frédéric", znalazłem je dzisiaj i pracowałem też dla mnie. @oboutblank: Oznacz tę odpowiedź jako zaakceptowaną, ponieważ wydaje się, że rozwiązała również Twój problem. – Nope

+0

Właśnie, dzięki za powiadomienie. :) – zeboidlund

0

$.val() prace dla obu wejść i obszarów tekstowych. Potrzebujesz tylko $.text() dla rzeczy takich jak divy, które nie mają "wartości" per se.

3

Powinieneś być w stanie użyć funkcji .is() jQuery - po prostu przekaż selektor do .is() i zwróci true, jeśli element pasuje do selektora. Tak więc, aby sprawdzić, czy miał textarea, byś po prostu sprawdzić:

if($(this).is("textarea")) { doStuff(); } 

http://api.jquery.com/is/

0

Czy może szukasz $(children[i]).attr("tagName");, która zwraca znacznik elementu , czy jest to zaznaczanie, wprowadzanie czy obsługa tekstowa?

3

Sprawdź właściwość nodeName.

jQuery(id).children().map(function(){ 
    console.log(children[i].nodeName.toLowerCase()); 
}); 

Można ale nie trzeba używać metody is z jQuery (overhead tutaj).

+0

Używanie' nodeName' jest w porządku, ale uważaj na przypadek.W zależności od typu dokumentu (HTML lub XML) wielkość zwracanej wartości nie będzie taka sama (wielka lub jak jest). –

+1

masz rację, zaktualizowałem fragment kodu :) – pomeh

0

Patrząc na dokumentacji jQuery, można łatwo uzyskać wszystkie wejścia formularz używając $(:input): http://api.jquery.com/input-selector/

Opis: Wybiera wszystkie wejścia, textarea, przycisk Wybierz i elementy. Selektor wejścia: w zasadzie wybiera wszystkie formanty formularzy.

.val() współpracuje również z pól tekstowych, ale jest zastrzeżenie ... zobacz docs dla odniesienia: http://api.jquery.com/val/

Fryderyk pisał swoją odpowiedź jak pisałem to i jego rozwiązanie korzystając z pewnością is() dowodzi.