2

我的代码中的一个 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不会自动执行,并且使用 eval() 执行 return js 被认为是不安全的并且通常是不好的做法。但是我需要在这里执行的代码只是返回的 html 片段(在 Django 模板中)的本地代码,包括在发送 ajax 请求的样板 html 中似乎违反了分隔规则。我应该向元素添加像 'data-role="specialbutton"' 这样的属性,并全局使用 jQuery.live() 来附加处理程序,还是什么?

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

4

1 回答 1

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/

于 2013-07-13T23:01:03.857 回答