haw*_*bsl 8 html javascript forms asp.net-mvc
我们有一个包含大量字段的普通ASP.NET MVC表单.第一个字段是最重要的,它是一个下拉列表.让我们说这是公司领域,它包含两个价值"可口可乐"和"百事可乐".
公司领域如下所示:
<div class="editor-label">
@Html.LabelFor(Function(model) model.Company)
</div>
<div class="editor-field">
@Html.DropDownListFor(Function(model) model.Company, TryCast(ViewData("Companies"), SelectList), New With {Key .style = "blah blah;"})
@Html.ValidationMessageFor(Function(model) model.Company)
</div>
Run Code Online (Sandbox Code Playgroud)
因为重要的是这个选择是积极的,并且不仅仅是因为它首先按字母顺序排列在"可口可乐"上,我们首先要求该字段为空(验证数据注释会强制用户将某些内容放入其中).
这很容易用Javascript完成,如下所示:
function InitialiseForm() {
$('#Company').prop('selectedIndex', -1);
}
window.onload = InitialiseForm;
Run Code Online (Sandbox Code Playgroud)
但是,我们有一些情况,表单没有完全填空,而是在控制器中初始化公司字段,如下所示:
modelObject.Company = "Coca Cola"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们当然不希望Javascript执行并删除它.
在这种情况下,正常的解决方案是什么?
我的假设是正确的:如果初始值为空,则DropDownListFor不会生成属性。selected
对于空公司,它会生成以下 html:
<select id="Company" name="Company">
<option value="1">Coca-Cola</option>
<option value="2">Pepsi</option>
</select>
Run Code Online (Sandbox Code Playgroud)
与所选公司的html代码不同:
<select id="Company" name="Company">
<option selected="selected" value="1">Coca-Cola</option>
<option value="2">Pepsi</option>
</select>
Run Code Online (Sandbox Code Playgroud)
所以你可以使用这个 JavaScript 代码,它会起作用:
$(function () {
if ($("#Company").find("option[selected]").length == 0) {
$("#Company").prop('selectedIndex', -1);
}
});
Run Code Online (Sandbox Code Playgroud)
另外,如果您的 jquery 版本早于 1.9.0,则option[selected]表达式可能无法正常工作。该错误在 1.9.0 中得到修复,但在早期版本中,“filter”、“children”和“is”等函数无法正常工作,而“find”和“has”则返回正确的结果。
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |