部分视图加载后触发 javascript

Fire javascript after a partial view loads

我有一个视图,它加载了几个下拉菜单的更改事件的一部分:

我有一些 javascript 调用一个动作:

$("#filterdd").on('change', function () {
    var datefrom = $('#fromdt').val().replace("/", "-").replace("/", "-");
    var dateto = $('#todt').val().replace("/", "-").replace("/", "-");      
    $("#partialexpcal").load('/home/experienceCalendarFilter?fromdt=' + datefrom + '&todt=' + dateto);
});

然后这个returns部分:

public ActionResult experienceCalendarFilter(string fromdt = "", string todt = "")
    {
        myModel model = new myModel();
        model = gd.getstuff(fromdt, todt);

        if (Request.IsAjaxRequest())
        {
            return PartialView("_expcalendar", model);
        }
        else
        {
            return View(model);
        }
    }

<div id="partialexpcal">
    @Html.Partial("_expcalendar", Model)
</div>

我正在使用 jQuery Datetimepicker,它需要在部分加载后触发:

function afterload() {
    $(".datefield").datepicker({ dateFormat: "dd/mm/yy", changeYear: true });

    $(function () {
        $.validator.addMethod('date',
        function (value, element) {
            if (this.optional(element)) {
                return true;
            }
            var ok = true;
            try {
                $.datepicker.parseDate('dd/mm/yy', value);
            }
            catch (err) {
                ok = false;
            }
            return ok;
        });
        $(".datefield").datepicker({ dateFormat: 'dd/mm/yy', changeYear: true });
    });
}

我在父视图和局部视图中都尝试了以下所有方法,其中 'expcalfilterdiv' 是局部视图中的主容器:

$('#expcalfilterdiv').ready(function () {
    alert("hit1");
    afterload()
});

这只在初始加载时命中,而不是在部分更改之后。

$('#expcalfilterdiv').live(function () {
    alert("hit1");
    afterload()
});

这个根本打不中

$('#expcalfilterdiv').livequery(function () {
    alert("hit1");
    afterload()
});

有没有什么方法可以让我在做这件事时获得 Ajax 成功?

Load 有第二个参数,在 AJAX 调用完成后调用,如下所示。

$("#partialexpcal").load('/home/experienceCalendarFilter?fromdt=' + datefrom + '&todt=' + dateto,function( response, status, xhr ){
//.. check for error here ...
afterload();
});

如果您查看 $.load() 文档,您会发现此函数接收 3 个参数。第三个是 complete,这是一个回调,一旦加载请求完成,它就会 运行。 IE。修改您的加载代码,添加第三个参数,该参数可以是函数定义或现有函数的名称,将在加载完成时执行:

$("#partialexpcal")
  .load('/home/experienceCalendarFilter?fromdt=' + datefrom + '&todt=' + dateto, 
  function() { /* */});

$("#partialexpcal")
  .load('/home/experienceCalendarFilter?fromdt=' + datefrom + '&todt=' + dateto,
  functionToInvoke);

注意:在文档中第二个参数被定义为可选的方括号,所以你可以省略它并直接指定第三个