部分视图加载后触发javascript

时间:2015-11-10 14:33:53

标签: javascript jquery ajax asp.net-mvc partial-views

我有一个视图,它会加载几个下拉列表的更改事件的部分内容:

我有一些调用动作的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);
});

然后返回部分:

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的成功?

2 个答案:

答案 0 :(得分:1)

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

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

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

注意:在文档中,第二个参数是可选的sith方括号,因此您可以省略它并直接指定第三个

答案 1 :(得分:0)

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

F#