将jQuery方法绑定到通过Ajax调用加载的Html

时间:2011-01-25 18:08:00

标签: jquery html ajax

我有从ajax调用加载的内容,但我想将自定义方法(不是事件)绑定到dom元素以实现某些功能。

我在网上找到的大多数解决方案都是绑定到页面的事件,如

$(".example").ajax({
  'success': function(data) {
     something()
  }
})

我想实现“加载内容”之类的东西,因为那里没有事件......

$('.post').live('load', function() {
       .....
    });

6 个答案:

答案 0 :(得分:2)

考虑.ajaxComplete

http://api.jquery.com/ajaxComplete/

例如:

// Normally you have an anonymous function. Make it a named function.
function myInitialize(scope) {
    $('.button', scope).button();
}

// Call it in document ready to initialize stuff that loaded in the page.
$(myInitialize(null));

// Call it again in .ajaxComplete
// 'this' is the div that loaded or has new content.
$('*').ajaxComplete(myInitialize(this));

答案 1 :(得分:1)

1)将所有绑定函数放在函数中......

2)现在在$(document).load()中调用此函数,以及将jtml添加到DOM的ajax的成功函数

注意* - 在Success方法中调用此函数是必要的,因为ajax是同步的,只有在响应到来之后才调用success方法,因为如果在向DOM添加html后调用这些函数将被绑定

答案 2 :(得分:0)

根据文件:

  

.live(eventType,eventData,handler)

     

eventTypeA包含的字符串   JavaScript事件类型,例如“点击”   或“keydown。”截至jQuery 1.4   字符串可以包含多个,   以空格分隔的事件类型或 自定义   事件名称 ,以及。

     

eventDataA将是数据的地图   传递给事件处理程序。

     

handlerA在。执行的函数   触发事件的时间。

所以你应该这样做。我不知道为什么不工作。我邀请你查看这个旧答案。

How to make live custom events in jQuery

我希望它有所帮助!

答案 3 :(得分:0)

如果你有一个将这个动作绑定到的事件(比如onclick),你可以使用live来完成这个...如果没有,试试livequery,它允许你在一个元素出现时绑定一个动作(没有人必须点击任何地方才能触发动作)

答案 4 :(得分:0)

从我过去两天的经验来看,我了解到有多种方式来实现您需要的功能

最快方式可能是使用自定义函数简单地处理您需要的数据,该函数将在您通过AJAX获取该内容之前(或之后)调用并将其插入DOM

$.ajax({
    success: function(data) {
        // do anything with data here
        data = $(data).find('#my_div').addClass('red');
        $('#element').append(data);
        // OR - do the neccessary amendments here
        $('#my_div').addClass('red');
    }
});

更容易(但可能更慢)的方式可能仍然是使用livequery来操纵您需要的对象 - 但是,这种方法在设置不正确时可能会变慢/ p>
$('#my_div').livequery(function() {
    $(this).addClass('red');
});

我建议阅读asking about live and livequery performance here

时获得的一些链接

答案 5 :(得分:0)

我遇到了Parched的ajaxComplete方法的问题,一直并且通常为其提供适当的目标来应用行为(例如AFAICT xhr.responseText不是文档的一部分,所以它不能因此我想出了这种替代方法,这可能会有所帮助。

在我的所有ajax调用中,我使用complete:event来触发新html目标上的已知事件。例如。 facebox容器或pjax目标。

// in my facebox ajax setup
$.ajax({
  ...,
  complete: function() {
    $('#facebox').trigger('end.facebox');
  }
}

然后我分别对这个事件作出反应。

$('*').live('end.facebox', function(e) {
  if (e.target == this) {
    apply_behavior(this); // in the style of Parched Squid's myInitialize
  }
});

我很乐意听到建议/改进,但这似乎足以适应多种ajax方法/事件类型和目的地。