Javascript Ajax和jQuery处理程序

Javascript Ajax和jQuery处理程序,javascript,jquery,ajax,Javascript,Jquery,Ajax,我学习Ajax,我有这个问题 例如,我的标记是 <div id='ajax-container'> .. <div class='some-class-with-handler'> .. </div> .. </div> 然后Ajax重载了#Ajax容器-block中的所有内容,但是。带有处理程序-block的某些类仍然包含在#Ajax容器-block的新内容中。同时,onClick处理程序不会绑定到新的。具有处理程序块的

我学习Ajax,我有这个问题

例如,我的标记是

<div id='ajax-container'>
  ..
  <div class='some-class-with-handler'>
    ..
  </div>
  ..
</div>
然后Ajax重载了#Ajax容器-block中的所有内容,但是。带有处理程序-block的某些类仍然包含在#Ajax容器-block的新内容中。同时,onClick处理程序不会绑定到新的。具有处理程序块的某些类。如何重建此绑定?

有两种选择:

  • 使用
    jQuery.live

    更新:根据文档,从1.7开始,
    live
    已被弃用。您可以使用上述文档中提到的语法:

    $( selector ).live( events, data, handler );                // jQuery 1.3+
    $( document ).delegate( selector, events, data, handler );  // jQuery 1.4.3+
    $( document ).on( events, selector, data, handler );        // jQuery 1.7+
    
  • 在AJAX之后重新绑定
    单击
    处理程序

    var someClassClickHandler = function(){
        ..
    };
    
    $('.some-class-with-handler').click(someClassClickHandler);
    
    $.ajax({
        success: function () {
            $('.some-class-with-handler').click(someClassClickHandler);
        }
    });
    

  • 这是因为新的
    。带有handler
    的某个类是新元素,您不能以这种方式绑定新元素。以这种方式更改处理程序-

    $(document).ready(function() { 
      ..
      $(document).on('click','.some-class-with-handler', function(){
        ..
      });
      ..
    }
    

    发布如何将ajax响应插入到
    #ajax容器块中
    委托您的事件我刚才确实键入了这个。不要使用
    .live()
    ,它早就被弃用了。改为使用事件委派。@putvande是的,你是对的。我已经更新了我的答案。
    $(document).ready(function() { 
      ..
      $(document).on('click','.some-class-with-handler', function(){
        ..
      });
      ..
    }