替代在Ajax响应中返回javascript标记

时间:2013-07-09 15:54:41

标签: javascript jquery ajax

我的代码中的一个ajax请求返回一些html,其中某些元素需要自定义事件处理,如下所示:

<div>
 <!--some html-->
 <button id='specialbutton'></button>
</div>
<script type='text/javascript'>
 $("#specialbutton").click(function(e){
   //some special handing of html above
});
</script>

我理解从ajax请求返回的javascript是not executed automatically,使用eval()执行返回js被认为是不安全的,通常是不好的做法。但是我需要在这里执行的代码只是返回的html片段的本地代码(在Django模板中),包括它在发送ajax请求的样板html中似乎违反了分离规则。我应该在元素中添加'data-role =“specialbutton”'等属性,并全局使用jQuery.live()来附加处理程序,还是什么?

这里的最佳做法是什么?有什么好建议吗?

1 个答案:

答案 0 :(得分:0)

你可以使用一些发布/订阅,这样只有在成功的ajax请求时才触发事件:

$.ajax({
    success: function( data ) {
      $(document).trigger('some/special/event');
    }
})

$(document).on( 'some/special/event', function() {
    $("#specialbutton").on( 'click', function(e){
         //some special handing of html above
    });
});

这将允许您维护代码的分离,并且只有HTML在页面上时才添加事件监听器 以下是关于使用自定义jQuery事件的精彩帖子的链接:http://www.sitepoint.com/jquery-custom-events/