事件在Ajax Response Jquery之后未触发

时间:2013-12-27 23:42:14

标签: jquery

我有一个国家/地区下拉,在更改时我会返回一个div,其中包含相同的国家/地区,其中包含其他字段。

我使用以下代码替换整个div。但在完成div的替换后,on change事件将停止进一步工作。我该如何解决这个问题?

    $("#country).on("change", function(){
        var str = $("#myform").serialize();
        $.ajax({
            type: 'POST',
            data:str,
            url:'../changeme',
            success: function(data){

                debugger;

                var html = $.parseHTML(data);
                var arrSelector = $(html).find('div[data-refresh=true]');
                var i;
                for(i=0;i<arrSelector.length;i++)
                {

                    $('#' + arrSelector[i].id).replaceWith($($(data)).find('#' + arrSelector[i].id));
                }
            },
            done:function(data){

            },
            error:function(data){

            },
            complete:function(data){

            }
        });
    });
},

3 个答案:

答案 0 :(得分:2)

通过正常方式不会通过动态创建的html调用事件。请改用以下内容,即使在替换包含国家/地区下拉列表的div后也应该调用它:

$(document).on('change', '#country', function() { ... });

答案 1 :(得分:1)

你有几个选择

不要更换整个元素,只需更换它的内容即可。当您替换元素时,它的事件绑定将丢失

-OR -

委托事件处理程序

 $(document).on('change',  '#country', function(){
    /* same code you already have*/
  })

答案 2 :(得分:0)

尝试将整个onChange事件代码放在init函数中,并在每次更换div时调用此函数。

function initOnChange() {
  $("#country).on("change", function(){ 
    ...
    success: function(data){
      ...
      initOnChange();
      ...
    }
    ...
  });
}