19

这非常令人费解,我什至不确定我应该在这里发布什么代码。然而问题非常简单。我在 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() 会返回正确的值。即使单击提交并调试提交模型的 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>

虽然此元素的 Firebug 中的 DOM 选项卡显示值:“20”

4

2 回答 2

42

检查 id 'Discount' 是否唯一。

当在一个页面上放置多个表单时,我将单独保留“名称”,但始终将“表单”元素的 id 作为每个“值”的 id 的前缀。

为我省去了很多头痛。

于 2012-05-31T08:57:48.653 回答
1

达人的回答绝对是一针见血。

但是,有时您希望返回具有相同 ID 的多个元素的值。(注意: ID 应该是唯一的。另一方面,类不需要是唯一的。)

为此,您需要使用该.each()方法进行迭代。大多数返回对象的 jQuery 方法都隐式迭代.val()返回一个字符串,而不是一个对象。因此,它需要一个显式的迭代循环。

你可以使用这样的.each()方法。

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

请注意,我将 OP 的 ID 更改为一个类,以便它是正确的 HTML。

于 2019-01-09T15:36:01.067 回答