2011-09-08 10 views
2

私は多くのjavascriptを持つページを持っています。 私はコンテンツを持っており、JavaScriptの効果があります。私はajaxを使用してコンテンツを別のコンテンツ(もちろん同じJavaScript効果で)に変更したいと思います。ここでajaxリクエスト後にすべてのjavascriptをリロードするにはどうすればよいですか?

は、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の効果のいずれかを持っていないです。 JavaScriptを再読み込みする必要があると思いますが、どうすれば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

これはおそらく、Ivanは正しいと言いますが、問題は他の場所です – Mic

0

古いものと新しいものの中のエフェクトのためのJavaScriptを含むcontentのブロックを再実行効果スクリプトこのようなもので、新しいノードを挿入した後:あなたはこのような操作の多くを計画している場合

/** 
* 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から古いスクリプトを削除することをお勧めすることができます。

関連する問題