Як отримати тип введення за допомогою jquery?


147

У мене є сторінка, де тип вводу завжди змінюється, і мені потрібно отримати значення залежно від типу введення. Отже, якщо тип - це радіо, мені потрібно отримати те, що його встановлено, і якщо це прапорець, мені потрібно зараз перевірити, і якщо це спад, я повинен знати, що вибрано, і я, якщо це текст / textarea Мені потрібно знати значення.

Будь-яка ідея, як це зробити?


2
Хлопці, все у вас залежить від вхідного ідентифікатора, але якщо у радіо чи прапорець у мене повинен бути той самий ідентифікатор? знаючи, що ідентифікатор повинен бути унікальним.
Люці

Відповіді:


270

EDIT 1 лютого 2013. Через популярність цієї відповіді та зміни в jQuery у версії 1.9 (та 2.0) щодо властивостей та атрибутів, я додав деякі примітки та загадку, щоб побачити, як це працює під час доступу до властивостей / атрибутів на вході, кнопки та деякі вибирає. Загадка тут: http://jsfiddle.net/pVBU8/1/


отримати всі входи:

var allInputs = $(":input");

отримати всі типи входів:

allInputs.attr('type');

отримати значення:

allInputs.val();

ПРИМІТКА: .val () НЕ те саме, що: перевіряється для тих типів, де це відповідає. використання:

.attr("checked");

EDIT 1 лютого 2013 р. - re: jQuery 1.9 використовувати prop () not attr (), оскільки attr не поверне належні значення для властивостей, які змінилися.

.prop('checked');

або просто

$(this).checked;

щоб отримати значення чека - що б воно не було зараз. або просто скористайтеся пунктом ": перевірено", якщо ви хочете лише те, що ARE перевірено.

EDIT: Ось ще один спосіб ввести тип:

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

EDIT2: Зауважте, що форма:

$('input:radio');

надається перевагу

$(':radio');

які обидва прирівнюються до:

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

але "вхід" бажаний, тому він отримує лише вхідні дані і не використовує універсальний "*", коли використовується форма $(':radio'), яка дорівнює$('*:radio');

EDIT 19 серпня 2015: перевагу $('input[type=radio]');слід використовувати, оскільки це дозволяє сучасним браузерам оптимізувати пошук радіовведення.


EDIT 1 лютого 2013 року за коментарем re: select elements @dariomac

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

поверне або "select-one", або "select-multiple", залежно від атрибута "multiple" та

$('select')[0].type 

повертає те саме для першого вибору, якщо він існує. і

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

поверне тип, якщо він існує, або "howdy", якщо його немає.

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

повертає властивість першого в DOM, якщо воно існує або "невизначене", якщо такого немає.

$('select').type

повертає тип першого, якщо він існує, або помилку, якщо такої немає.


Я спробував це: var type = $ (": input [name =" + name + "]"). Attr ('type'); і це спрацювало! Дякую.
Люці

2
А як щодо "випадаючого" або вибору введення ...? тому що це не вхідний тег ... У мене є та сама проблема, але зараз я думаю використовувати властивість типу dom ...
dariomac

allInputs.attr('type');отримає лише перший тип введення елементів, тобто allInputs[0].attr('type');якщо в колекції більше одного елемента. Те саме стосується, allInputs.val();якщо ви хочете зробити щось із типом або значенням кожного елемента, вам доведеться зробити щось на кшталтallInputs.each(function(){ var type = $(this).attr('type'); var val = $(this).val() });
andyface

LOL ця скрипка взяла на себе своє життя з 82 переглядом станом на цю дату. jsfiddle.net/pVBU8/82
Марк

15

Ви можете зробити наступне:

var inputType = $('#inputid').attr('type');

це означає, що я повинен дати кожному радіо / перевірити один і той же ідентифікатор?
Люці

6
@zeina - Ніколи не надайте елементам однаковий ідентифікатор.
користувач113716

@ patrick - Я знаю, що ідентифікатори повинні бути унікальними, але чому вони пропонують отримати тип введення за id
Люці

1
НІ, ви не можете надати їм той самий ідентифікатор, що НЕ дійсний. Ви можете скористатися: селектором вводу jQuery
Марк Шультейс

9

Якщо ви говорите про те, що ви хочете отримати всі введення у формі, яка має значення, не турбуючись про тип введення, спробуйте це:

Приклад: http://jsfiddle.net/nfLfa/

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

Тепер у вас повинен бути набір вхідних елементів, які мають певне значення.

Ви можете помістити значення в масив:

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

Або ви можете їх серіалізувати:

var serialized = $inputs.serialize();

7
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();
};


4

Найкраще місце для початку шукати http://api.jquery.com/category/selectors/

Це дасть вам гарний набір прикладів.

Остаточно вибір елементів у DOM досягається за допомогою селекторів CSS, тому якщо ви думаєте про отримання елемента за ідентифікатором, ви хочете використовувати $ ('# elementId'), якщо ви хочете, щоб усі вхідні теги використовували $ ('input') і, нарешті, частина, на яку я думаю, що вам захочеться, якщо ви хочете, щоб усі теги вводу з типом прапорця використовували $ ('input, [type = checkbox])

Примітка. Більшість потрібних значень ви знайдете в атрибутах, тому селектор css для атрибутів є: [attributeName = value]

Тільки тому, що ви попросили спадне меню, призначене до списку, спробуйте наступне:


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

Код був із пам’яті, тому, будь ласка, накопичуйте невеликі помилки


Про що тут йдеться "[size]"?
Незнайомець

@Udhayakumar '[size]' буде фільтрувати результати, включаючи лише вибрані елементи з атрибутом розміру, таким чином вибиратимуться лише поля списків, а не спадні місця.
Роберт

списки -> Ви маєте на увазі текстові поля?
Незнайомець

1
@Udhayakumar, я не маю на увазі вікно списку, перейдіть за цим посиланням [ jsfiddle.net/565961fj ], щоб побачити різницю між спадним списком і списком.
Роберт

3
var val = $('input:checkbox:checked, input:radio:checked, \
   select option:selected, textarea, input:text',
   $('#container')).val();

Коментарі:

  1. Я припускаю, що існує рівно один елемент форми, який може бути або текстовою областю, полем введення, обраною формою, набором перемикачів або одним прапором (вам доведеться оновити мій код, якщо вам потрібно більше прапорців).

  2. Елемент, про який йде мова, знаходиться всередині елемента з ідентифікатором container(для усунення неоднозначностей з іншими елементами на сторінці).

  3. Потім код поверне значення першого знайденого елемента, який він знайде. Оскільки я використовую :checkedі таке інше, це завжди має бути саме тим, що ви шукаєте.


3

Здавалося б, функція attr стає ще більш застарілою

$(this).attr('TYPE')
undefined
$(this).prop('type')
"text"

0

У своїй програмі я закінчив два різні елементи, що мають однаковий ідентифікатор (погано). Один елемент був дівом, а інший вкладом. Я намагався підбити підсумки і взяв трохи часу, щоб усвідомити повторювані ідентифікатори. Розмістивши тип потрібного елемента перед #, я зміг схопити значення вхідного елемента та відкинути div:

$("input#_myelementid").val();

Я сподіваюся, що це допомагає.


0
<!DOCTYPE html>
<html>

<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
          $(".show-pwd").click(function(){
          alert();
            var x = $("#myInput");
            if (x[0].type === "password") {
              x[0].type = "text";
            } else {
              x[0].type = "password";
            }
          });
        });
    </script>
</head>

<body>
    <p>Click the radio button to toggle between password visibility:</p>Password:
    <input type="password" value="FakePSW" id="myInput">
    <br>
    <br>
    <input type="checkbox" class="show-pwd">Show Password</body>

</html>

0
  <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script type="text/javascript" src="hs/jquery1.js"></script>
        <title>Document</title>
    </head>
    <body>
        <form>
            <input type="text" class="tamil">
            <input type="button" class="english">
        </form>
        <script>
            $("input").addClass(function(index){
                    console.log($(this).attr('type'));
            })
        </script>
    </body>
    </html>

я отримую тип форми Райт

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.