让 ajax 加载的部分视图中的元素触发 jquery 事件(引导模式形式)

Posted

技术标签:

【中文标题】让 ajax 加载的部分视图中的元素触发 jquery 事件(引导模式形式)【英文标题】:Getting jquery event to fire for element in ajax loaded partial view (bootstrap modal form) 【发布时间】:2013-05-21 21:42:33 【问题描述】:

我正在尝试找出正确的方法来初始化引用通过 ajax 加载的部分视图元素的 jquery 事件。具体来说,我正在尝试以引导模式形式使用 bootstrap-datepicker.js。

背景:有一个正常工作的页面,日期选择器正在工作。今天的项目是将这种形式转换为引导模式。我所做的很多事情都来自MVC 4 Edit modal form using Bootstrap

一切正常。由于我现在正在通过 ajax 加载部分视图,因此 datepicker 不起作用。我明白这个问题,我只是不知道解决方案。任何建议表示赞赏。

调用视图有

<div class="modal hide fade in" id="addclas-s-room">
    <div id="clas-s-room-container"></div>
<div>

<script type="text/javascript">
$(document).ready(function () 
    $('#addclassbtn').click(function () 
        var url = "/Quiz/AddClas-s-room?quizId=@ViewBag.quizid"; 
        $.get(url, function (data) 
            $('#clas-s-room-container').html(data);
            $('#addclas-s-room').modal('show');
        );
    );
);
</script>

控制器:

public ActionResult AddClas-s-room(int quizId)

    var clas-s-room = ...
    return PartialView("_AddClas-s-room",clas-s-room);

局部视图:

@using (Ajax.BeginForm("AddClas-s-room", "Quiz", FormMethod.Post,
                    new AjaxOptions
                    
                        //InsertionMode = InsertionMode.Replace,
                        HttpMethod = "POST",
                        UpdateTargetId = "addclas-s-room"
                    ))
    
        @Html.ValidationSummary()
        @Html.AntiForgeryToken()
        <div class="modal-body">
            <fieldset class="QuizDisplayFields">
                *fields...etc*
                @Html.TextBoxFor(model => model.StartDate, new @class="datefield" )
                @Html.ValidationMessageFor(model => model.StartDate)
                *more fields...*
                <input type="submit" class = "btn btn-primary" value="Save" />
            </fieldset>
        </div>
    

<link href="~/Content/datepicker.css" rel="stylesheet" />
<script src="~/Scripts/bootstrap-datepicker.js"></script>

   <script>
    $(document).ready(function () 
        $("#StartDate").datepicker();
    );
   </script>
   <script>
       $(function ($) 
           $("#StartDate").on("click").datepicker();
       );
   </script>

【问题讨论】:

【参考方案1】:

$(document).ready 不能部分工作。它仅在页面初始加载时执行。

因此,您需要将部分脚本中的这些脚本转移到您的 ajax 调用的回调函数中。

【讨论】:

感谢您的回复。这就是我收集的内容,但我尝试过的任何方法都没有奏效。答案原来是这个和这个的组合:***.com/questions/12978254/… 出于我不太明白的原因,我不得不将 .datepickerz-index:1151; 添加到我的 css 中。 嗯,很奇怪。 z-index 修复看起来像 datepicker 隐藏在模式后面。 Bootstrap modal 的 z-index 为 1050,因此 datepicker 被赋予了更高的 z-index 值。

以上是关于让 ajax 加载的部分视图中的元素触发 jquery 事件(引导模式形式)的主要内容,如果未能解决你的问题,请参考以下文章

您可以从 html 元素触发 Sencha Touch 中的动作/事件吗?

AngularJS:在部分视图出现之前触发 $viewContentLoaded

AJAX部分加载后的Vue绑定?

mvc中的异步页面加载

从木偶视图重新加载部分车把将无法访问为父视图中的部分模板元素定义的 ui 对象

当页面通过ajax作为部分加载时,如何重新绑定淘汰视图模型?