2012-02-18 95 views
1

我通过$.ajax加载从另一个页面的一些HTML:

<script type="text/javascript"> 
    $(function() { 
     $.ajax({ 
      url: '/getInfo', 
      context: $('#contentBox'), 
      success: function(data) { 
       $(this).html(data); 
      } 
     }); 
    }); 

    $(function() { 
     $('#clickableElement').click(function() { 
      alert("I work!"); 
     }); 
    }); 
</script> 

<div id="contentBox"></div> 

的代码加载这个HTML到DIV ID为contentBox

<p id="clickableElement">I'm clickable.</p> 

然而,当我点击款装载,没有警报盒弹出。当涉及到通过AJAX加载的元素时,我不认为我正确访问了DOM。我怎样才能解决这个问题?

+0

你还有困难吗? – gdoron 2012-02-18 22:49:45

+0

非常感谢,javascript现在正在使用'.on()'。但是,CSS选择器不是。 – dangerChihuahua007 2012-02-18 23:53:00

+0

哪些选择器? – gdoron 2012-02-18 23:55:03

回答

5
$(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+ 

on版本:

$('#contentBox').on('click', '#clickableElement', function() { 
    alert('I work!'); 
}); 

ondocs

当提供一个选择器,该事件处理程序被称为委托。当事件直接发生在绑定元素上时,不会调用该处理程序,而只会为与选择器匹配的后代(内部元素)调用该处理程序。 jQuery将事件从事件目标引发到处理程序所附的元素(即,最内层到最外层的元素),并沿着匹配选择器的路径上的任何元素运行处理程序。

+0

谢谢你的帮助。如何在未命名的函数中访问ID为'#clickableElement'的元素?我现在不能使用'$(this)',因为'$(this)'是指ID#contentBox'的元素,对吗? – dangerChihuahua007 2012-02-20 18:50:07

+0

@DavidFaux。 'this'将是clickableElement请参见[this](http://jsfiddle.net/DXmQU/)DEMO – gdoron 2012-02-21 07:21:18

0

当浏览器运行您的脚本时,没有节点id = clickableElement,您必须标记该元素也可以在以后创建。

要访问动态DOM节点,您应该使用jQuery中的on()函数。

+1

'live()'已弃用。 – kapa 2012-02-18 21:57:17

+0

谢谢,什么是动态DOM节点? – dangerChihuahua007 2012-02-18 21:57:57

+1

哦,我的,所以使用http://api.jquery.com/on/作为没有废弃的生活版本.... – IProblemFactory 2012-02-18 21:59:25