Обновление 2
Как я и подозревал ниже, ваши идентификаторы не были уникальными: у вас есть оба:
<div id="year-2-1" style="margin: 5px 0px;">
А это:
<input type="text" value="" class="fsField" size="32" name="year_2_1" id="year-2-1">
jQuery, вероятно, находит первый, который (конечно) не имеет value
.
Обновление 1
Из того, что вы описываете, наиболее вероятный сценарий состоит в том, что у вас нет элемента с идентификатором year-2-1
(на первом проходе) и т. Д. & Mdash; или у вас есть более одного такого элемента (который является недопустимым и поэтому непредсказуемым). Потому что, по сути, если DOM прав, он работает: http://jsbin.com/icume3 И если нет элемента с таким идентификатором, вы получите именно то, что описываете: http://jsbin.com/icume3/2
Старый, по-видимому, неправильный ответ (во многих отношениях) :
Вы не показали свою разметку, но я думаю, что .val()
работает там, где .attr("value")
не потому, что вы имеете дело с элементом формы, у которого нет * Атрибут 1034 *, как select
(см. Ниже) . .val
получает значение элемента, которое зависит от типа элемента.
Редактировать : Очевидно, jQuery обрабатывает «значение» в attr
, по крайней мере, для select
с, по крайней мере, в браузерах, которые я пробовал (включая IE6, поэтому): http://jsbin.com/oxega3 Так не то.