JQuery val() 返回空字符串

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”


你可能也想尝试使用.text(),因为Html.EditorFor会清除掉<textarea>,而且据我所知,一些旧版本的jQuery无法使用.val()获取textarea的值。 - Richard Neil Ilagan
text() 在表单上的所有输入字段中返回一个空字符串。 - elector
你能否发布一段使用.val()函数的JavaScript代码?不仅仅是一行代码,而是整个代码块。 - ILya
您检查过'id'为'Discount'的唯一性了吗? - Daren Schwenke
@Daren 可能就是这样。让我试试看。 - elector
显示剩余2条评论
2个回答

42

检查ID“Discount”是否唯一。

在同一页上放置多个表单时,我保持'name'不变,但始终将'form'元素的ID前缀添加到每个'value'的ID中。

这样可以避免很多麻烦。


你解决了我的烦恼 :D - Ivan Aracki
我知道这个,也检查过了,但问题仍出在这里。你的回答让我“重新审视”,非常感谢! - Gary Richter
我也遇到了这个问题。 "创建帐户" 页面有 "用户名" 和 "密码" 字段,但同样的页眉上也有一个登录表单,其中包含 "用户名" 和 "密码",我忽略了它。谢谢! - Al Sweigart

1

达伦的回答确实言简意赅。

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

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

您可以像这样使用.each()方法。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接