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

JQuery val() возвращает пустую строку

Это очень озадачивает, и я даже не уверен, какой код я должен разместить здесь. Но проблема очень проста. У меня есть форма в модальном диалоге JQuery, где я делаю некоторые расчеты цен. Среди прочего, у меня есть поле Скидка. Представлено как:

<div class="editor-label">
    @Html.LabelFor(model => model.Discount)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Discount, new { size = 10 })
</div>

Я вижу в отладчике Firebug вкладку DOM, что это поле имеет значение 20. И это видно на форме, конечно. Но вызов:

 $('#Discount').val()

возвращает пустую строку. И это единственное поле, в котором есть эта проблема. Вызов val() для других полей возвращает правильные значения. Даже нажав submit и отлаживая действие MVC для представленной модели, я вижу, что значение для Discount существует. Функция JQuery возвращает пустую строку и только для этого поля.

Я знаю, что это немного абстрактный вопрос, но кто-нибудь когда-либо имел такой опыт?

Спасибо

Сгенерированный HTML:

<div class="editor-label">
  <label for="Discount">Popust (%)</label>
</div>
<div class="editor-field">
  <input id="Discount" class="text-box single-line valid" type="text" value="0" name="Discount" data-val-range-min="0" data-val-range-max="100" data-val-range="Vredonst mora biti izmedju 0 i 100" data-val-number="Polje Popust (%) mora biti broj" data-val="true" size="10">
</div>

Пока вкладка DOM в Firebug для этого элемента показывает значение: "20"

4b9b3361

Ответ 1

Убедитесь, что идентификатор "Скидка" уникален.

При размещении нескольких форм на одной странице я оставляю только имя, но всегда префикс идентификатора элемента 'form' к идентификатору каждого значения.

Сохраняет много головных болей.

Ответ 2

Дарен ответ определенно ударил ногтем по голове.

Однако бывают случаи, когда вы хотите вернуть значение нескольких элементов с одинаковым идентификатором. (Примечание: идентификаторы должны быть уникальными. С другой стороны, классы не должны быть уникальными.)

Для этого вам нужно выполнить итерации с помощью .each(). Большинство методов jQuery, которые возвращают объект, неявно повторяются. .val() возвращает строку, а не объект. Из-за этого ему нужен явный цикл итерации.

Вы можете использовать метод .each() следующим образом.

$('.discount').each(function(){
    $(this).val()
});

Обратите внимание, что я изменил OP ID на класс, чтобы он был правильным HTML.