无法在页面加载时调用JavaScript函数

时间:2013-05-27 11:54:27

标签: javascript asp.net-mvc onload

我有一个名为refreshProjects()的javascript函数,它的作用是根据前一个下拉列表中选择的内容过滤下拉列表。但是我需要在页面完成加载后直接过滤我的列表。

我尝试过使用代码window.onload = refreshProjects(id)没有任何问题,但是当我使用window.onload = alert('这个页面已经完成加载!')时onload工作,所以我知道那部分关闭了脚本有效。那么我如何在加载时调用javascript函数,我认为它会很简单,但我试过的东西都失败了。

@section Scripts {

    @Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">

    window.onload = refreshProjects(id);   <-- Problem

    $("#ddCustomers").change(function () {
        refreshProjects($(this).val());
    });
    function refreshProjects(id) {
        var projects = $("#ddProjects");
        $.get('@Url.Action("FilterProjects","TimeEntry")', { customerId: id },
        function (result) {
            // clear the dropdown
            projects.empty();

            //Add a deafult "null" value
            $("#ddProjects").get(0).options[0] = new Option("[ - No project - ]", "-1"); 

            // rebuild the dropdown
            $.each(result, function (i, e) {
                projects.append($('<option/>').text(e.Text).val(e.Value));
            });
        });
    }</script>
}

这适用于MVC 4.5。

2 个答案:

答案 0 :(得分:2)

尝试将window.onload = refreshProjects(id);更改为:

window.onload = function() { refreshProjects($("#ddCustomers").val()); };

Onload需要一个回调函数。您正在直接执行refreshProjects()并将返回值设置为onload。

但是因为您似乎正在使用jQUery,所以您可以执行以下操作:

$(function() {
    refreshProjects($("#ddCustomers").val());
});

这将在文档准备就绪时执行refreshProjects(实际上是在窗口加载之前)。

答案 1 :(得分:0)

您还可以尝试使用以下内容:

$(document).ready(function () { 
    refreshProjects(id);
});

如果您使用的是jQuery,这应该可以使用。