当Click Click </script>调用AJAX $ .load()方法时,jQuery无法运行<script>

时间:2011-12-27 17:02:24

标签: html jquery javascript-events linkedin

我一直在努力解决这个问题并且无法理解。希望这是我错过的显而易见的东西。

以下是代码:

$(document).ready(function() {

$('#clickbox').load('eventpage/clicks.html.php #click2', function () {
    console.log('click2 loaded');
    $(this).hide()
    .fadeIn(3000);

    $('#click2').click(function(e) {
        e.preventDefault(); 
        console.log('click2 clicked');  
        $('#bizdev').load('pagewithscripttags.php', function (data) {
            console.log(data);
            console.log('#bizdev is loaded, but scripts are not run');
            $('#bizdev').hide();
            console.log('bizdev hidden');
        });                      
        $('#content').hide();
        $('#bizdev').show();
    });
});  

当我运行它(从外部js文件)时,文件'pagewithscripttags.php'被加载到click事件的DOM中,但是脚本没有执行,我无法找出原因。帮助!

但是,当我将load方法移动到第一个加载的回调函数时,文件将被插入到DOM中并运行脚本:

$(document).ready(function() {

$('#clickbox').load('eventpage/clicks.html.php #click2', function () {
    console.log('click2 loaded');
    $(this).hide()
    .fadeIn(3000);

    $('#bizdev').load('pagewithscripttags.php', function (data) {
            console.log(data);
            console.log('#bizdev loaded and scripts are run');
            $('#bizdev').hide();
            console.log('#bizdev hidden');
    }); 

    $('#click2').click(function(e) {
        e.preventDefault(); 
        console.log('click2 clicked');  
        $('#content').hide();
        $('#bizdev').show();
    });
});  

为什么脚本作为回调函数的一部分运行,而不是单击事件(我需要它们运行时)?

以下是pagewithscripts.php的内容:

<script>console.log('this script was run');</script>
<script type="IN/MemberProfile" data-id="http://linkedin.com/publicprofileurl" data-format="inline" width='106px' data-related="false"></script> 

第一个脚本运行并显示在console.log上,但第二个脚本只是插入到DOM中而不运行,除非我将.load()方法放在click处理程序之外。

(我需要在点击事件上加载脚本,因为它们需要几秒钟才能运行(它们调用LinkedIn API),当我在文档就绪时运行它们时会出现冻结/延迟。)

3 个答案:

答案 0 :(得分:0)

加载脚本数据类型 http://api.jquery.com/jQuery.getScript/

答案 1 :(得分:0)

实际上jQuery' click()'函数无法处理动态元素的“点击”事件,因此请尝试on()live()函数以使您的代码正常工作,使用这些函数,您可以将点击处理程序代码移出第一个load()回调。

仅供参考:尝试使用此$('#click2').click(function(e) {代码替换$('#click2').live("click", function(e) {代码。

注意:从jQuery版本1.7开始,不推荐使用'live()'函数。

如果您不清楚使用这些功能,请提供完整的页面来源,以便我可以相应地检查和调整您的代码。

答案 2 :(得分:0)

您可能需要告诉LinkedIn框架重新扫描页面。

IN.parse(れ)

这里有关于事件的JavaScript API参考文档: https://developer.linkedin.com/documents/inauth-inevent-and-inui