特定的javascript代码只与警告语句一起工作

Specific javascript code only working with alert statement

本文关键字:警告 语句 一起 工作 javascript 代码      更新时间:2023-09-26

所以我有一个下拉菜单,应该是由Json对象值填充。代码是这样的:

$("#sport").val(model.SportId);

嗯,当我加载页面时,它不起作用。下拉列表默认为"None Selected"选项。所以我做了一个贫民窟调试,在模型上放了一个警告。SportId看看发生了什么

当我刷新页面…它的工作原理。我唯一做的就是

alert(model.SportId);

它会弹出一个显示"1"的弹出窗口,然后下拉菜单值会显示选项"Major League Baseball"(这是该选项值的文本)。就是这样。这是我唯一改变的东西。将警告放在第一行代码之前。如果我把警告放在代码后面,它就不起作用了。我不知道这是为什么。

派生Json对象的视图模型将SportId作为一个可空的int。这和这件事有关系吗?

编辑:

好的,在我的razor视图中,这是我的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);
}

这可能是与填充选项时执行的异步任务相关的问题(如ajax请求)。这可能就是alert()工作的原因:它停止javascript的执行,以便任务有足够的时间完成(无论如何,一个链接可能真的很感激)。

编辑:GetSports()函数可以是那个任务;

我想知道这是不是因为模型。SportId是一个类型=== 'number' ..?你试过这个吗?我不知道为什么它会工作,因为jQuery应该足够聪明来处理这个:

$("#sport").val(model.SportId+'');

还有,试试这个:

alert($("#sport").length);
$("#sport").val(model.SportId);
alert($("#sport").length);

可能是你的javascript在HTML加载之前正在执行。alert()可以给它足够的时间来加载。