1

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

我尝试使用代码 window.onload = refreshProjects(id) 没有成功,但是当我使用 window.onload = alert('This page has finished loading!') 时 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。

4

2 回答 2

2

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

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

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

但由于您似乎在使用 jQUery,您可以执行以下操作:

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

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

于 2013-05-27T11:56:27.760 回答
0

您也可以尝试使用以下方法:

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

如果您使用 jQuery,这应该也可以工作。

于 2013-05-27T11:59:28.660 回答