2011-09-08 61 views
2

我有一個頁面有很多javascripts。 我有內容,它有JavaScript效果。我想使用ajax將內容更改爲另一個內容(當然,使用相同的javascript效果)。如何在ajax請求之後重新加載所有javascripts?

這裏是我的Ajax請求的代碼:

<head> 
<script type="text/javascript"> 
function ajax(txt) { 
    if (window.XMLHttpRequest) 
    { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else 
    { 
     xmlhttp = new ActiveXObject("MICROSOFT.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 & xmlhttp.status==200) 
     { 
      document.getElementById("content").innerHTML=xmlhttp.responseText; 

    } 
    } 
    xmlhttp.open("GET", "index.php?p="+txt, true); 
    xmlhttp.send(); 
} 
</script> 
</head> 
<body> 
<div id="content"> 
...content... 
</div> 
<input type="button" onclick=ajax('2') value="click" /> 
</body> 

的問題是改變內容,但新的內容沒有任何的JavaScript特效。 而我認爲javascripts需要重新加載,但我怎麼能在ajax請求後做到這一點?

謝謝

+0

可以請你發佈你的javascript效果嗎? –

+0

頁面上有很多javascript的問題,因爲它是我從模板商店購買的模板。所以我不能在這裏發佈所有這些 – Hani

回答

0

您不必重新加載您的JavaScript文件。您所要做的就是讓「效果」知道您網頁上有新內容。通常你必須重新運行一個函數。在使用jquery函數的情況下是$(document.ready(...))。如果您的「效果」未包含在函數中,而是包含它們並在內容更改時調用此函數。

+0

但是這個頁面有很多javascript函數和文件,我不知道到底在哪些內容上起作用,因爲我沒有製作頁面,我買了它,現在我試圖編輯它。 – Hani

0

如果重新加載JavaScript文件是解決方案,你可以試試這個功能:

function inject(src, cb, target){ 
    target = target || document.body; 
    var s = document.createElement('SCRIPT'); 
    s.charset = 'UTF-8'; 
    if(typeof cb === 'function'){ 
     s.onload = function(){ 
      cb(s); 
     }; 
     s.onreadystatechange = function() { 
      (/loaded|complete/).test(s.readyState) && cb(s); 
     };      
    } 
    s.src = src; 
    target.appendChild(s); 
    return s; 
}; 

,並使用它:

inject('path/to/new.js'); 

,或者如果你想觸發一個動作使用的回調函數當文件被加載時:

inject('path/to/new.js', function(s){ 
    //the file is loaded 
}); 
+0

沒有工作:( – Hani

+0

以及它可能意味着,伊萬是正確的,問題是在別處 – Mic

0

包括舊的和新的影響的JavaScript像這樣的東西插入新節點之後個並重新運行效果腳本:

/** 
* Evaluates scripts included via innerHTML. 
* @param {Node} node Node containing scripts. 
* */ 
function evalScripts(node){ 
    if (!node) return; 

    var st = node.getElementsByTagName('SCRIPT'); 
    var strExec; 

    for (var i = 0; i < st.length; i++) { 
     strExec = st[i].text; 
     //st[i].parentNode.removeChild(st[i]); 
     st[i].text = ''; 

     try { 
      var x = document.createElement('script'); 
      x.type = 'text/javascript'; 
      x.innerHTML = strExec; 

      document.getElementsByTagName('head')[0].appendChild(x); 
     } 
     catch (bug) {} 
    } 
}; 

此外,它可以從head刪除舊腳本好主意,不知何故,如果你計劃了很多這樣的操作。

相關問題