jQuery .attr ('value') возвращает неопределенное значение для текстовой области - PullRequest
2 голосов
/ 24 августа 2011

У меня есть страница, которая динамически вводит форму через ajax и отображает ее в модальном div (который находится над оверлейным div, охватывающим всю страницу). Это позволяет им сохранять определенные данные до закрытия окна. Все отлично работает, кроме одной вещи.

$('#save_close_form').find('*[name]').each(function(index, form_element) {
    var cfe = (form_element.jquery == undefined ? $(form_element) : form_element);
    console.log(cfe.attr('name') + " => " + cfe.attr('value'));
    if (cfe.attr('name').match(/data\[/)) {
        if (cfe.attr('type') == 'checkbox') {
            if (cfe.attr('checked')) {
                map[cfe.attr('name')] = 'on';
            }
            else {
                map[cfe.attr('name')] = '';
            }
        }
        else if (cfe.attr('type') == 'radio') {
            // only get checked radio buttons
            if (cfe.attr('checked')) {
                map[cfe.attr('name')] = cfe.attr('value');
            }
        }
        else {
            map[cfe.attr('name')] = cfe.attr('value');
        }
    }
});

Часть в предложении else {} в конце вызывает элементы TextArea и input type="text", но по какой-то причине она всегда видит cfe.attr('value'); как undefined для TextArea. Для этого я использую FF6.0 с jQuery 1.6.

Ответы [ 6 ]

13 голосов
/ 24 августа 2011

Попробуйте .val() вместо .attr('value').

<textarea> не имеет атрибута value (текст находится между тегами, а не в value=""), однако я верю, что .val() получит его.

2 голосов
/ 24 августа 2011

Для текстовых областей используйте:

 $("#textareaid").val() or $("#textareaid").html()

.

jQuery для получения текста textarea

Установите значение текстовой области в jQuery

1 голос
/ 24 августа 2011

textarea не имеет атрибута value по умолчанию. Вы должны использовать cfe.val() или cfe.html(), чтобы получить его содержимое.

1 голос
/ 24 августа 2011

TextArea не имеет атрибута с именем value ... попробуйте использовать val

map[cfe.attr('name')] = cfe.val();
0 голосов
/ 24 августа 2011

Хорошо, причина в том, что jQuery 1.6 делает различие между атрибутом при создании и текущим значением свойства. Вы создали текстовую область без атрибута значения более чем вероятно; таким образом, начальное значение undefined. Если вы хотите получить указанное значение, вам нужно либо использовать .prop('value'), либо вызвать более полезный метод .val().

0 голосов
/ 24 августа 2011

Это потому, что текстовая область не имеет атрибута значения.

Вместо этого используйте .val().

...