特定的javascript代码仅与alert语句一起使用

时间:2011-12-15 16:12:12

标签: javascript jquery asp.net-mvc

所以我有一个下拉菜单,应该由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);
}

2 个答案:

答案 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()可能会给它足够的时间来加载。