Проблема с добавлением элементов в DIV (appendChild)
Есть документ вида:
<div id="cont"></div> <script language="javascript">function test1(){ var test1_cont = document.getElementById('cont'); var test1_div = document.createElement('div'); test1_div.innerHTML = 'test 1 <br>'; test1_cont.appendChild(test1_div); } window.onload = function (){ test1();} </script> <script language="javascript">function test2(){ var test2_cont = document.getElementById('cont'); var test2_div = document.createElement('div'); test2_div.innerHTML = 'test 2 <br>'; test2_cont.appendChild(test2_div); } window.onload = function (){ test2();} </script> Проблема в том, что в слой добавляется содержимое из 2-й функции. Почему 1-я не выполняется? Что делать? PS Запихнуть все это в одну функцию крайне проблематично, т.к. код генерируется из PHP файла, и придется много переделывать. |
потому что когда Вы делаете второе присвоение обработчика событию window.onload, в частности
window.onload = function (){ test2();}то первое присвоение window.onload = function (){ test1();}умирает. Поробуйте так: window.onload = function (){test1(); test2();} |
Цитата:
Цитата:
Пробовал так: <script language="javascript">function test1(){ var test1_cont = document.getElementById('cont'); var test1_div = document.createElement('div'); test1_div.innerHTML = 'test 1 <br>'; test1_cont.appendChild(test1_div); } if(window.funcname === undefined){ window.funcname = "test1();" }else{ window.funcname += " test1();"} window.onload = function (){ window.funcname;} </script> <script language="javascript">function test2(){ var test2_cont = document.getElementById('cont'); var test2_div = document.createElement('div'); test2_div.innerHTML = 'test 2 <br>'; test2_cont.appendChild(test2_div); } if(window.funcname === undefined){ window.funcname = "test2();" }else{ window.funcname += " test2();"} window.onload = function (){ window.funcname;} </script> <div id="cont"></div> Нот так тоже не работает. Может еще какие идеи есть? |
Извините, но тут написано столько ерунды, что её трудно комментировать. Вы пытаетесь складывать функции с текстами функций, а запускать на выполнение не функцию а её текст...
Для начала Вам надо четко различать, в чем разница написания трёх вариантов: function test1(){ //var test1_cont = document.getElementById('cont'); var test1_div = document.createElement('div'); test1_div.innerHTML = 'test 1 <br>'; //test1_cont.appendChild(test1_div); } alert('1: ' + "test1();" ); alert('2: ' + test1 ); alert('3: ' + test1() ); |
Нет смысла писать по тексту несколько раз window.onload = ...
Вот такой вариант устроит? <script language="javascript"> var ind = 0; var funcs = []; </script> <script language="javascript">function test1(){ var test1_cont = document.getElementById('cont'); var test1_div = document.createElement('div'); test1_div.innerHTML = 'test 11 <br>'; test1_cont.appendChild(test1_div); } funcs[ind] = test1; ind++; </script> <script language="javascript">function test2(){ var test2_cont = document.getElementById('cont'); var test2_div = document.createElement('div'); test2_div.innerHTML = 'test 22 <br>'; test2_cont.appendChild(test2_div); } funcs[ind] = test2; ind++; </script> <script language="javascript"> //alert(funcs); window.onload = function (){for (var i=0; i < ind; i++) funcs[i]()}; </script> <div id="cont"></div> |
Цитата:
Цитата:
var ind = 0; var funcs = []; Но идея помогла! :thanks: Сделал так: <script language="javascript">function test1(){ var test1_cont = document.getElementById('cont'); var test1_div = document.createElement('div'); test1_div.innerHTML = 'test 1 <br>'; test1_cont.appendChild(test1_div); } if(window.funcname === undefined){ window.funcname = new Array(test1) }else{ window.funcname.push(test1) } window.onload = function (){ for(var i = 0; i < window.funcname.length; i++){ window.funcname[i]() } } </script> <script language="javascript">function test2(){ var test2_cont = document.getElementById('cont'); var test2_div = document.createElement('div'); test2_div.innerHTML = 'test 2 <br>'; test2_cont.appendChild(test2_div); } if(window.funcname === undefined){ window.funcname = new Array(test2) }else{ window.funcname.push(test2) } window.onload = function (){ for(var i = 0; i < window.funcname.length; i++){ window.funcname[i]() } } </script> <div id="cont"></div> |
а не проще ли переписать ту самую жуткую теневую функцию, которая создает эти скрипты таким образом, чтобы она не шлепала их десятками, а выдала один, который сделает все, что написано в данных скриптах, разом. и потом один же window.onload? например, пускай она выдаст массив значений, которые надо вписать в document.getElementById('cont') и циклом их туда внесет. действительно, бред какой-то
|
Часовой пояс GMT +3, время: 20:35. |