2011-12-27 65 views
0

我一直在爲此掙扎一段時間,但無法弄清楚。希望這是明顯的,我錯過了。

下面的代碼:

$(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)並有凍結/滯後,當我在文件上運行他們準備好了劇本。)

+0

如果你想要加載的是LinkedIn的腳本不能你只需立即創建(而不是使用Ajax來獲取它?)。例如:'$(' ').appendTo(document.body)'而不是:'$('#bizdev') .load('pagewithscripttags.php'...' – powerbuoy 2011-12-28 04:07:22

回答

0

加載腳本數據類型 http://api.jquery.com/jQuery.getScript/

+0

我看了** .getScript()**並使用** eval **來運行腳本,但如果不重寫LinkedIn小部件, * .ajax()** with dataType:「script」不起作用。使用**。帶有dataType:「html」的ajax()**給出與使用**。load()**相同的結果。 – edpeciulis 2011-12-27 21:12:31

0

其實jQuery的「點擊()」功能將無法處理動態元素的「click」事件,所以儘量on()live()功能,使你的代碼工作正常,使用這些功能,你可以移動點擊處理程序代碼不在第一個load()回調中。

僅供參考:嘗試用此$('#click2').live("click", function(e) {代碼替換您的$('#click2').click(function(e) {代碼。

注意:'live()'函數已從jQuery 1.7版本開始棄用。

如果您不清楚使用這些功能,那麼只需提供您的整個頁面源代碼,以便我可以相應地檢查和調整您的代碼。

+0

也許我還沒有理解你在暗示什麼,但在我看來,**。click()**方法正在處理'click'事件,因爲它阻止了默認操作,成功輸出到console.log,並且調用第二個**。load()**方法。然而,.load()剝離了一些腳本塊,而不是像它應該的那樣運行它們。我同意** on()**或** delegate()**將允許處理程序代碼在第一次load()回調之外移動,但爲什麼腳本的運行方式不同? – edpeciulis 2011-12-27 20:53:44