Jak uzyskać Typ wejścia za pomocą jquery?

Mam stronę, na której Typ wejściowy zawsze się zmienia i muszę uzyskać wartości w zależności od typu wejściowego. Więc jeśli typ jest radio, muszę dostać, które jest zaznaczone, a jeśli jest to pole wyboru muszę teraz, które są zaznaczone, a jeśli jest to rozwijane muszę wiedzieć, które jest zaznaczone, i jeśli jest to tekst/textarea muszę znać wartości.

Jakiś pomysł jak to zrobić?

Author: Luci, 2010-07-02

9 answers

Edycja 1 lutego 2013. Ze względu na popularność tej odpowiedzi i zmiany w jQuery w wersji 1.9 (i 2.0) dotyczące właściwości i atrybutów, dodałem kilka notatek i skrzypce, aby zobaczyć, jak to działa podczas uzyskiwania dostępu do właściwości/atrybutów na wejściu, przyciskach i niektórych selekcjach. Skrzypce tutaj: http://jsfiddle.net/pVBU8/1/


Pobierz wszystkie wejścia:

var allInputs = $(":input");

Get all the input type:

allInputs.attr('type');

Pobierz wartości:

allInputs.val();

Uwaga: .val() nie jest to samo co: sprawdzane dla tych typów, w których jest to istotne. użycie:

.attr("checked");

EDIT Feb 1, 2013-re: jQuery 1.9 użyj prop () nie attr (), ponieważ attr nie zwróci odpowiednich wartości dla właściwości, które się zmieniły.

.prop('checked');

Lub po prostu

$(this).checked;

Aby uzyskać wartość czeku-cokolwiek to jest obecnie. lub po prostu użyj': checked', jeśli chcesz tylko te, które są zaznaczone.

EDIT: oto inny sposób na uzyskanie typu:

var allCheckboxes=$('[type=checkbox]');

EDIT2: Zauważ, że forma:

$('input:radio');

Jest perferred over

$(':radio');

Które odpowiadają:

$('input[type=radio]');

Ale" input "jest pożądany, więc pobiera tylko wejścia i nie używa uniwersalnego'*", gdy używana jest forma $(':radio'), która równa się $('*:radio');

EDIT Aug 19, 2015: preferencje dla $('input[type=radio]'); powinny być używane, ponieważ pozwalają nowoczesnym przeglądarkom zoptymalizować wyszukiwanie wejścia radiowego.


EDIT Lut 1, 2013 per comment re: wybierz elementy @ dariomac

$('select').prop("type");

Zwróci "select-one" lub " select-multiple "w zależności od atrybutu" multiple " i

$('select')[0].type 

Zwraca to samo dla pierwszego select, jeśli istnieje. i

($('select')[0]?$('select')[0].type:"howdy") 

Zwróci Typ, jeśli istnieje lub "howdy", jeśli nie.

 $('select').prop('type');

Zwraca właściwość pierwszej z DOM, jeśli istnieje lub "undefined", jeśli żadna nie istnieje.

$('select').type

Zwraca typ pierwszego, jeśli istnieje, lub błąd, jeśli żaden nie istnieje.

 228
Author: Mark Schultheiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-19 12:36:23

Możesz wykonać następujące czynności:

var inputType = $('#inputid').attr('type');
 13
Author: xil3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-02 11:58:52

Jeśli chcesz uzyskać wszystkie dane wejściowe w formularzu, które mają wartość, nie martwiąc się o typ danych wejściowych, spróbuj tego:

Przykład: http://jsfiddle.net/nfLfa/

var $inputs = $('form').find(':checked,:selected,:text,textarea').filter(function() {
    return $.trim( this.value ) != '';
});

Teraz powinieneś mieć zestaw elementów wejściowych, które mają pewną wartość.

Możesz umieścić wartości w tablicy:

var array = $inputs.map(function(){
    return this.value;
}).get();

Albo możesz je serializować:

var serialized = $inputs.serialize();
 9
Author: user113716,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-02 12:40:09
GetValue = function(id) {
  var tag = this.tagName;
  var type = this.attr("type");

  if (tag == "input" && (type == "checkbox" || type == "radio"))
    return this.is(":checked");

  return this.val();
};
 7
Author: Matthew Abbott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-02 12:02:35
$("#yourobj").attr('type');
 4
Author: Ergec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-02 11:59:12

Najlepszym miejscem, aby zacząć szukać jest http://api.jquery.com/category/selectors/

To da ci dobry zestaw przykładów.

Ultamatly wybór elementów w DOM jest dokonywany za pomocą selektorów CSS, więc jeśli myślisz o uzyskaniu elementu według id, będziesz chciał użyć $('#elementId'), jeśli chcesz, aby wszystkie znaczniki wejściowe używały $('input'), a na koniec część, którą myślę, że będziesz chciał, jeśli chcesz, aby wszystkie znaczniki wejściowe z typem pola wyboru używały $('input'), [type=checkbox])

Uwaga: większość pożądanych wartości znajduje się na atrybutach, więc selektor css dla atrybutów to: [attributeName=wartość]

Tylko dlatego, że poprosiłeś o rozwijaną listę jako przypisaną do listboxa, spróbuj:


$('select, [size]).each(function(){
  var selectedItem = $('select, [select]', this).first();
});

Kod był z pamięci, więc proszę o zapoznanie się z małymi błędami

 4
Author: Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-02 12:11:57
var val = $('input:checkbox:checked, input:radio:checked, \
   select option:selected, textarea, input:text',
   $('#container')).val();

Komentarze:

  1. Zakładam, że istnieje dokładnie JEDEN element formularza, który może być albo textarea, input field, select form, zestaw przycisków radiowych lub pojedyncze pole wyboru (będziesz musiał zaktualizować mój kod, jeśli potrzebujesz więcej pól wyboru).

  2. Element, o którym mowa, znajduje się wewnątrz elementu o ID container (Aby usunąć niejasności z innymi elementami na stronie).

  3. Kod zwróci wtedy wartość first element, który znajduje. Ponieważ używam :checked i tak dalej, zawsze powinna to być dokładnie wartość tego, czego szukasz.

 3
Author: Boldewyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-02 12:31:52

Wydaje się, że funkcjonalność attr jest coraz bardziej przestarzała

$(this).attr('TYPE')
undefined
$(this).prop('type')
"text"
 3
Author: pat capozzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-14 18:11:05

W mojej aplikacji skończyłem z dwoma różnymi elementami o tym samym id (zły). Jednym elementem był div, a drugim wejście. Próbowałem podsumować moje dane i zajęło mi trochę czasu, aby zrealizować duplikaty identyfikatorów. Umieszczając Typ elementu, który chciałem przed#, mogłem pobrać wartość elementu wejściowego i odrzucić div:

$("input#_myelementid").val();
Mam nadzieję, że to pomoże.
 0
Author: Tibi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-23 14:55:47