Здравствуйте
наткнулся на такой момент
динамическое изменение документа через innerHTML или insertAdjacentHTML
вставляемая строка содержит скрипт
так вот, при первой вставке скрипт выполняется, при последующих нет
пример
HTML>
<SCRIPT>
var count = 0;
function insertScript(){
var sHTML="<input type=button onclick=" + "go2()" + " value='Click Me " + (count++) + "'><BR>";
var sScript="<SCRIPT DEFER>alert('tt');";
sScript = sScript + "function go2(){ alert('Hello from inserted script.') }";
sScript = sScript + "</SCRIPT" + ">";
ScriptDiv.innerHTML = sHTML + sScript;
}
</SCRIPT>
<BODY onload="">
<DIV ID="ScriptDiv"></DIV>
<A HREF="#" onclick="insertScript()">click</A>
</BODY>
</HTML>
кликать на ссылку
HTML перегенерируется, надпись на кнопке меняется, а алерт 'tt' только на первый клик появляется
есть какое-нибудь лекарство от этого?
Здравствуйте, Аноним, Вы писали:
M_D>>динамическое изменение документа через innerHTML или insertAdjacentHTML
M_D>>вставляемая строка содержит скрипт
А>А если через DOM ?
А>Ссылка была гдето на http://ru.wikipedia.org/AJAX
через DOM работает
путем долгих экпериментов выяснил
если вставить в innerHTML строку, начинающуюся со скрипта, то
этот скрипт не виден потом в структуре документа
переставил скрипт ниже, стал виден в структуре документа
ну а дальше через DOM можно делать что угодно
единственное, скрипт имеет атрибут defer и чтобы, например, заменились ранее определенные функции,
нужно его инициализировать заново
var pageBodyScript = document.getElementById( "pageBodyScript" );
var parentElem = pageBodyScript.parentNode;
var newElem = document.createElement( "script" );
newElem.id = "pageBodyScript";
newElem.text = pageBodyScript.text;
newElem.type = pageBodyScript.type;
newElem.language = pageBodyScript.language;
parentElem.removeChild( pageBodyScript );
parentElem.appendChild( newElem );
другого метода не нашел