jQuery text () и val (), возвращающие ноль - PullRequest
0 голосов
/ 07 июня 2011

РЕДАКТИРОВАТЬ: Кажется, я не использовал 'id' на моем textarea, так что проблема устранена, но у меня все еще есть несколько проблем с текстом ()

var e = $('textarea#cost-'+i).val(); // e = 1 (for first iteration)
alert($('p#subtotal-'+i).text()); // alert 'subtotal' which is the text in my p#subtotal-1
$('p#subtotal-'+i).text().replaceWith(e); // <- this is the problem, i think
alert($('p#subtotal-'+i).text()); // no alert box at all

и на этот раз я убедился, что у них всех есть идентификаторы.


Следующий код создает окно предупреждения, в котором ничего нет. Если я изменяю его на val (), он говорит 'undefined'


$('textarea.costbox').live('blur',function() {
for(var i in items) {
alert('iteration '+i);
alert('textarea#cost-'+i);
var e = $('textarea#cost-'+i).text();
alert('cost '+e);
}
});

<textarea name="cost-1" class="costbox"></textarea>

Идея этого кода заключается в обновлении промежуточного итога при изменении значения. Это последний кусок головоломки.

Весь HTML выглядит нормально, когда я проверяю его в Chrome. И все остальное в моем коде работает нормально.

Это должно работать с modernizer1.7 и jQuery1.5.1, основанными на последних HTML5Boilerplate.

Вот еще один пример той же самой базовой вещи - http://jsbin.com/obeho5/3/edit

Возможно, это что-то простое, но я застрял здесь часами и не вижу этого.

[если это не что-то очевидное и простое, я могу выложить больше кода]

Ответы [ 3 ]

4 голосов
/ 07 июня 2011

# используется для получения идентификатора, ваш элемент не имеет идентификатора, только имя.

Либо добавьте ID, либо используйте это:

'textarea[name="cost-'+i+'"]'

2 голосов
/ 07 июня 2011

Вы не включили jQuery в ваш пример . Он отлично работает, используя .val(): http://jsbin.com/obeho5/4/edit

Примечание: Остальные правы в отношении кода, который вы разместили в вопросе, но разметка, которую вы имеете в демоверсии, отличается. В демоверсии элементы имеют идентификаторы.

1 голос
/ 07 июня 2011
$('textarea#cost-'+i).text();

Ищет текстовое поле с ID, вы дали ему имя, вам нужно сделать:

$('textarea[name="cost-' + i +'"]').text();

изменить: для вашего обновленного выпуска:

$('p#subtotal-'+i).text().replaceWith(e); 

должно быть

$('p#subtotal-'+i).text(e);

Вам не нужно беспокоиться о replaceWith, вы можете просто добавить новый текст в качестве параметра метода.

...