2012-01-21 34 views
0

我有一个通过$ .load()加载的dom对象。然后我有点击函数连接到被加载的对象。如何获取通过AJAX加载的DOM对象来触发附加到新DOM对象的jQuery

点击函数不会触发新的DOM对象。

我错过了什么?

没有在.cntrls a点击功能正在发射。

这里有一个例子:

$('.ati a').click(function() { 

    // First, clear out the current content 
    if ('.msg-obj' || '.poc-obj' || '.pom-obj || .cntrls') { 
     $('.msg-obj, .poc-obj, .pom-obj, .cntrls').hide(); 
    }; 

    // Get the URL for the object that is clicked 
    var clickedObjPath = $(this).attr('href'); 

    console.log(clickedObjPath); 

    $('#msg').load(clickedObjPath + ' .msg-obj').fadeIn(); 
    $('.poc').load(clickedObjPath + ' .poc-obj').fadeIn(); 
    $('.pom').load(clickedObjPath + ' .pom-obj').fadeIn(); 
    $('.cntrls').load(clickedObjPath + ' .cntrls a').fadeIn(); 

    return false; 
}); 


$('.cntrls a ').click(function() { 

    // Get the URL for the object that is clicked 
    var cntrlObjPath = $(this).attr('href'); 
    console.log(cntrlObjPath); 

    return false; 

}); 

回答

2

如果你安装了单击处理的对象实际上是在页面存在之前,他们不会,除非你使用委派事件处理工作。该代码将查找所需的对象来挂接其事件处理程序,并且不会找到它,因此没有任何东西会被连接起来。

在1.7之前的jQuery中,您将使用.delegate(),而在jQuery 1.7+中,您将在安装点击处理程序时存在的父对象上使用.on()

使用.on()(jQuery的1.7+),你会做这样的:

$(document.body).on('click', '.ati a', function() {...}); 

理想情况下,你会选择那是比身体的对象更接近实际的对象,并在存在父对象你安装点击处理程序的时间,但你没有包含任何你的HTML,所以我不知道除了body之外还应该选择什么。

预jQuery的1.7语法将是这样的:

$(document.body).delegate('.ati a', 'click', function() {...}); 

旧的方式来做到这一点是使用.live(),但已过时的jQuery的所有版本和他们建议.delegate()预的jQuery 1.7或用于jQuery 1.7+的.on()

+0

就是这样!谢谢您的帮助。我用.on() - 工作完美。 –

0

试试现场活动绑定$(“a”)。live(.....)在jq文档中