在通过jQuery的load()函数加载的HTML上使用已经加载的JS?

时间:2012-01-23 18:18:10

标签: javascript jquery html load

不确定这是否可行,但是当我最初在通过jQuery script加载的动态HTML上请求页面时,我正在尝试使用通过load()标记加载的JavaScript功能

示例:http://jsfiddle.net/3MR43/

正如您在示例中所看到的,点击弹出框中的链接后链接就会消失。问题是链接被假定为停止,您可能会看到警报。

但是,如果我粘贴我通过jQuery加载的HTML,它可以工作,所以代码很好。

5 个答案:

答案 0 :(得分:3)

描述

您需要jQuery .live().on()方法将事件绑定到动态创建的html。

根据您使用的jQuery版本,选择.live().on()

  

.live()自jQuery 1.3起可用。为现在和将来与当前选择器匹配的所有元素附加事件处理程序。

     

.on()自jQuery 1.7起可用。将一个或多个事件的事件处理函数附加到所选元素。

查看我的示例和此jsFiddle Demonstration

示例

...适用于jQuery.live()

$('.lang').live("click", function(e) {   
    e.preventDefault();  
    alert('Testing..');        
});

...对于jQuery.on()

$('.lang').on("click", function(e) {   
    e.preventDefault();  
    alert('Testing..');        
});

更多信息

答案 1 :(得分:2)

问题是,您.click将仅为当时存在的元素执行此操作。如果您希望对该选择器匹配的所有潜在未来元素执行此操作,您希望on()delgate()live()使用较旧版本的jQuery。)

答案 2 :(得分:0)

创建元素后必须注册$('.lang').click()事件!

你需要在load函数上进行回调才能注册它。

答案 3 :(得分:0)

您需要使用live来将处理程序附加到动态加载的元素。

试试这个,它会解决你的问题。

$('。lang')。live('click',function(e){

    e.preventDefault();

    alert('Testing..');

});

答案 4 :(得分:0)

您必须对动态加载的元素使用on函数:

    $('.open_lang').click(function(e) {      
    e.preventDefault();    
    $('#popup').load('http://skins.thehabbos.org/pop_up/language.php').css('display', 'block');            
});

$('body').on('click', '.lang', function(e) {    
    e.preventDefault();  
    alert('Testing..');        
});

(JQuery 1.7+中不推荐使用livedelegate,这是JSFiddle的版本)已修复JSFiddle