Подтвердить что ты не робот

Определение ввода vs textarea в jQuery

Я хочу выполнить итерацию по форме, добавив каждый элемент в область. Проблема в том, что некоторые из этих элементов - это выбор, ввод и текстовые поля. Я знаю, что я могу использовать :input для решения проблемы здесь (хотя мне это действительно не нужно). Проблема в том, что у меня возникают проблемы с определением того, как я мог видеть, является ли элемент текстовой областью, вводом, выбором и т.д. Мне нужно сделать это правильно, потому что, насколько мне известно, 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;
}
4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

Вы можете не использовать метод is из jQuery (здесь накладные расходы).

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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