所以我有一个下拉菜单,应该由Json对象值填充。代码如下:
$("#sport").val(model.SportId);
好吧,当我加载页面时,它不起作用。下拉列表默认为默认的“None Selected”选项。所以我做了一个贫民窟调试,我在model.SportId上发出一个警告,看看是什么。
当我刷新页面时......它有效。我唯一做的就是
alert(model.SportId);
它会弹出一个显示“1”的弹出窗口,然后下拉菜单值转到“Major League Baseball”选项(该选项值的文本)。而已。这是我唯一改变的事情。在第一行代码之前放置警报。如果我在代码后面发出警报,它就不起作用。我不知道为什么会这样。
从中派生Json对象的viewmodel将SportId作为可以为null的int。这与它有什么关系吗?
编辑:
好的,所以在我的剃刀视图中,这是我的javascript:
<script type="text/javascript">
$(document).ready(function () {
var model=@Html.Raw(Json.Encode(Model.Title));
var read=@Html.Raw(Json.Encode(Model));
var sportsurl='@Url.Action("GetSports", "Titles")';
var sportsteamsurl='@Url.Action("GetSportsTeams", "Titles")';
TitleBasicEdit(model, read, sportsurl, sportsteamsurl);
});
javascript函数titlebasicedit是:
function TitleBasicEdit(model, url, read, backurl, seasonsurl, autocompleteurl, urlforward, sportsurl, sportsteamsurl) {
if ((model.TitleTypeId == 3) || (model.TitleTypeId == 8)) {
GetSports(sportsurl);
SportsDependency(sportsteamsurl);
alert(model.SportId);
$("#sport").val(model.SportId);
$("#sport").change();
$("#hometeam").val(model.HomeSportTeamId);
$("#awayteam").val(model.AwaySportTeamId);
}
答案 0 :(得分:3)
这可能是与填充选项时执行的异步任务相关的问题(如ajax请求)。这可能是alert()工作的原因:它停止执行oj javascript,以便任务有足够的时间来完成(无论如何,链接可能真的很感激)。
编辑:GetSports()函数可以是该任务;
答案 1 :(得分:0)
我想知道是不是因为model.SportId是一个==='数字'的类型..?你试过这个吗?我不知道它为什么会起作用,因为jQuery应该足够智能来处理这个问题:
$("#sport").val(model.SportId+'');
另外,试试这个:
alert($("#sport").length);
$("#sport").val(model.SportId);
alert($("#sport").length);
可能是您的JavaScript在HTML加载之前正在执行。 alert()可能会给它足够的时间来加载。