определение ввода против текстовой области в JQuery - PullRequest
16 голосов
/ 28 ноября 2011

Я хочу перебрать форму, добавив каждый элемент в область. Проблема в том, что некоторые из этих элементов - это select, input и textbox. Я знаю, что могу использовать :input для решения проблемы здесь (хотя мне это и не нужно). Проблема в том, что у меня возникают проблемы с определением того, как я могу видеть, является ли элемент текстовой областью, input, select и т. Д. Мне нужно сделать это правильно, потому что, насколько я знаю, jQuery("input#someinput").val() отлично работает для ввода , но для текстовой области мне может понадобиться jQuery("textarea#sometexarea").text(). Я не уверен, существует ли это ...

В любом случае, вот моя функция:

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

Ответы [ 6 ]

53 голосов
/ 28 ноября 2011

val () одинаково хорошо работает с элементами <input>, <select> и <textarea>.

Если вы все еще хотите определить фактический тип элементов, сопоставляемых селектором :input, вы можете использовать is () с селекторами элементов :

$(":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.
    }
});
3 голосов
/ 28 ноября 2011

Посмотрите на свойство nodeName.

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

Вы можете, но не обязательно использовать метод is из jQuery (здесь).

3 голосов
/ 28 ноября 2011

Вы должны иметь возможность использовать функцию jisu .is () - просто передайте селектор в .is (), и он вернет true, если элемент соответствует селектору.Итак, чтобы увидеть, есть ли у вас текстовая область, вы просто должны проверить:

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

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

0 голосов
/ 28 ноября 2011

Глядя на документацию по jQuery, вы можете легко получить все входные данные формы, используя $(:input): http://api.jquery.com/input-selector/

Описание: Выбор всех элементов ввода, текстовой области, выбора и кнопок. Селектор: input в основном выбирает все элементы управления формы.

.val() также работает с текстовыми областями, но есть предостережение ... см. Документацию для справки: http://api.jquery.com/val/

Фредерик опубликовал свой ответ, когда я писал это, и его решение использовать is(), безусловно, доказывает.

0 голосов
/ 28 ноября 2011

Возможно, вы ищете $(children[i]).attr("tagName");, который возвращает тег элемента, будь то select, input или textarea?

0 голосов
/ 28 ноября 2011

$.val() работает как для ввода, так и для текстовых областей. Вам нужно $.text() только для таких вещей, как div, которые не имеют "значение" как таковое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...