1

我正在尝试向通过 AJAX 插入的 DOM 对象添加行为。

从我在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); 

通过 firebug,我可以验证 ajax 调用是否成功,内容会根据需要被替换。onInit在 document.ready 事件和 ajax.sucess 事件之后被调用。firebug 控制台中没有显示任何错误。然而,对第二个 onInit($scope) 调用没有反应。

我在这里做错了什么?

使用的 jquery 版本是 1.9.1。

4

1 回答 1

1

在 replaceWith() 文档中,您可以阅读:

用提供的新内容替换匹配元素集中的每个元素,并返回被移除的元素集

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

于 2013-06-01T14:35:43.403 回答