2013-06-01 138 views
1

我正在尝试向通过AJAX插入的DOM对象添加行为。Ajax成功后的jQuery rebind监听器

从我读到的jQuery Api Docs我认为最好有一些范围onInit(scope)处理程序来执行新内容的事件绑定。

到目前为止,我有这样的:

function onInit(scope) { 
    console.log('init', scope); 
    $('.sometestclass', scope).css({'color':'red'}); 
} 

(function($) { 
    $(document).ready(function(){ 
     $(document).on('click', '.ajax-button', function(event){ 
      event.preventDefault(); 
      $target = $(this); 
      $.ajax({ 
       url: 'validUrl', 
       ... 
       success: function(data) { 
        var $new = $target.replaceWith(data);  
        onInit($new); 
       }, 
      }); 
     }); 

    onInit(this); 
}); 

})(jQuery); 

通过萤火虫,我可以验证Ajax调用succesfull,内容被根据需要更换。 onInit在document.ready事件和ajax.sucess事件之后被调用。在萤幕控制台中没有显示错误。 然而,第二个onInit($ scope)调用没有任何反应。

我在这里做错了什么?

使用的jquery版本是1.9.1。

+1

什么是$新确切?你期望新的$是什么? –

回答

1

在replaceWith()文档中,则可以读取:

在设定与所提供的新 内容匹配元素的替换每个元件和返回的一组中除去元件。

因此,在这里,您正在调用init()函数删除元素。

+1

就是这样。究竟。经过约一个小时的调查,你只是告诉我,我误解了文档。你说得对。谢谢。 – marc