Ciao a tutti.
Ho la seguente situazione:
Ho una pagina PHP così strutturata (riporto solo la parte necessaria del codice):
- div#SIDEBAR
- div#PAGE
ed uno script esterno richiamato nell'head.
Menu.js:
codice:
var Menu = function () {
this.addMenuElements = function (menuList) {
for (var i=0; i<menuList.length; i++) {
menuList[i].addEventListener("click", function (e) {
e.preventDefault();
e.stopPropagation();
document.getElementById('page').innerHTML = "Loading ...";
var ajax = new XMLHttpRequest();
ajax.open("GET", this, true);
ajax.send();
ajax.addEventListener("readystatechange", function () {
if (this.readyState == 4) {
document.getElementById('page').innerHTML = this.responseText;
var regex = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
var str = this.responseText;
var scripts = str.match(regex);
eval(scripts[0].replace(/(<\s*\/?\s*)script(\s*([^>]*)?\s*>)/gi,''));
}
}, false);
}, false);
}
}
}
All'interno di SIDEBAR troviamo
Successivamente viene istanziato un oggetto di Menu:
codice:
<script type='text/javascript'>
window.addEventListener('DOMContentLoaded', function () {
var menuElements = document.getElementsByName('menuElement');
menu = new Menu();
menu.addMenuElements(menuElements);
}, false);
</script>
Alcuni dei link all'interno di SIDEBAR puntano a pagine con codice JS, che dopo aver ottenuto il response da ajax, tramite regex ed eval il codice viene eseguito correttamente.
Ma questo accade solo la prima volta che viene cliccato un link, se provo a fare una seconda chiamata dallo stesso link il codice JS non viene più eseguito; idem per gli altri link e cioè la prima volta tutto ok la seconda chiamata saltano fuori i seguenti errori.
DA CONSOLE:
FIREFOX : TypeError: UpgradeArticoli is not a constructor
GOOGLE CHROME : Uncaught TypeError: object is not a function
AGGIUNGO UN ESEMPIO DI PAGINA CON JS:
codice:
<div id='upgradeArticoli'> ... </div>
<script type='text/javascript'>
var formUpgradeArticoli = document.getElementById('upgradeArticoli');
UpgradeArticoli = new UpgradeArticoli();
UpgradeArticoli.addForm(formUpgradeArticoli);
UpgradeArticoli.searchElements('page');
</script>
Magari sarà qualcosa di banale ma uso JS da pochissimo (un mese scarso).