【问题标题】:jQuery events stop working after partial view post in asp.net mvc(4) Part IIjQuery 事件在 asp.net mvc(4) Part II 中的部分视图发布后停止工作
【发布时间】:2014-07-04 03:46:51
【问题描述】:

我有一个具有以下布局的视图 父 View 由几个 PartialView 组成。其中之一是一个列表,其中每个项目都有一个相应的编辑按钮,该按钮将项目加载到另一个 PartialView,但这是通过 ajax 加载到模式引导对话框中。

通过点击编辑按钮,部分视图在模态对话框中加载没有问题,但在提交对话框后,编辑按钮停止触发事件并且模态不再加载,我的意思是,编辑按钮的单击处理程序停止在职的。

我相信这是因为在发布模态 im ajax 后重新加载包含编辑按钮的列表部分视图,因此我需要重新绑定事件。但是这样做会在编辑点击事件和模态表单提交之间形成循环调用?

父视图中的脚本:

$(".btn.mylink").on("click", function () {            
            var id = $(this).data('id');
            var url = "/SalidaDetalle/Edit/" + id;            
            $.get(url, function (data) {
                $(".modal-body").html(data);
                $('#myModal').modal('show');

                $(".edit-detail").on('submit', function () {
                    $.post($(this).attr('action'),
                    $(this).serialize(), 
                    function (data, status) {                        
                        $('#myModal').modal('hide');
                        $("#details").html(data);

                    }).error(function (error, status, a, b) {
                        writeError('msgError', 'Error processing request. Please check errors and try again!');
                        $('.modal-body p.body').html(error.responseText);

                    });
                    return false;
                });

            });
        });

注意: 这个问题与this one有关

【问题讨论】:

  • 必须将$(".edit-detail") 放入$.get(url, function (data) { 中吗?我相信这会给您的脚本带来一些问题
  • @Se0ng11,这是为加载 ajax 的模态表单连接提交事件的方法。
  • 通过ajax刷新表单提交列表部分视图后?
  • @EhsanSajjad,是的,我就是这样做的。基于 ChrisPratt 在您对另一个问题的回答中的评论。我应该在这里使用委托事件吗?
  • @Elio.Batista 你必须在这个场景中编写委托事件,因为元素是在 DOM 加载后动态创建的

标签: jquery ajax asp.net-mvc twitter-bootstrap asp.net-mvc-4


【解决方案1】:

与其直接将事件绑定到您的按钮,不如将它们锚定到不会刷新的包含块。即使您在该局部视图中重新加载了内部内容,您的事件仍将继续触发。

$("#container").on("click",".btn.mylink", function (evt) {            
        var id = $(evt.currentTarget).data('id');
        var url = "/SalidaDetalle/Edit/" + id;            
        $.get(url, function (data) {
            $(".modal-body").html(data);
            $('#myModal').modal('show');
        });
    });

$("#container").on('submit',".edit-detail", function (evt) {
         $.post($(evt.currentTarget).attr('action'),
         $(evt.currentTarget).serialize(), 
         function (data, status) {                        
             $('#myModal').modal('hide');
               $("#details").html(data);

         }).error(function (error, status, a, b) {
              writeError('msgError', 'Error processing request. Please check errors and try again!');
            $('.modal-body p.body').html(error.responseText);

   });
   return false;
   });

您需要调整脚本并将带有 id 容器的 div 添加到您的父视图,但您明白了

【讨论】:

  • 好的,我应该在 ajax 调用上使用委托事件而不是绑定事件吗?我在其他问题中读到不推荐这样做,这就是我这样做的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2014-08-24
相关资源
最近更新 更多