
24.02.2010, 12:11
|
 |
Интересующийся
|
|
Регистрация: 24.02.2010
Сообщений: 13
|
|
Выполнение скриптов на динамически загруженных страницах
Привет всем. Я с JS начал знакомиться недавно и еще очень много чего не знаю, поэтому, возможно, ламерский вопрос:
Есть страница с оформлением и куча страниц с контентом. Страницы с контентом подгружаются в страницу с оформлением, всё работает, и всё было бы хорошо, но на некоторых страницах с контентом есть свои скрипты, которые перестают работать на итоговой странице (когда контент объединяется с дизайном). Внимание, вопрос: "Как заставить эти скрипты работать?" Буду очень благодарен за любую помощь.
|
|

24.02.2010, 13:18
|
Кандидат Javascript-наук
|
|
Регистрация: 21.11.2008
Сообщений: 114
|
|
for (var re = /<script[^>]*>((?:(?!<\/script>).)*)/g, $; $ = re.exec(responseText); )
eval($[1]);
Как-то так... возможно, есть способ получше.
|
|

24.02.2010, 13:46
|
 |
Интересующийся
|
|
Регистрация: 24.02.2010
Сообщений: 13
|
|
Спасибо, конечно, но куда этот кусок кода вписывать?
|
|

24.02.2010, 14:03
|
Кандидат Javascript-наук
|
|
Регистрация: 21.11.2008
Сообщений: 114
|
|
Я так понял, страницы с контентом - это подгруженные аяксом куски html? Если так, то, очевидно, туда, где эти куски вставляются в innerHTML блока-контейнера (сразу после вставки, чтобы необходимые элементы уже были в дереве). А если не так, то уточните.
|
|

24.02.2010, 14:24
|
 |
Интересующийся
|
|
Регистрация: 24.02.2010
Сообщений: 13
|
|
да, это просто куски html, подгружаю через Dynamic Ajax Content от DynamicDrive. Вот она функция подгрузки:
function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText;
}
Исправил на:
function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText;
for (var re = /<script[^>]*>((?:(?!<\/script>).)*)/g, $; $ = re.exec(responseText); )
eval($[1]);
}
Не помогло
|
|

24.02.2010, 15:32
|
Кандидат Javascript-наук
|
|
Регистрация: 21.11.2008
Сообщений: 114
|
|
function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText;
for (var re = /<script[^>]*>((?:(?!<\/script>).)*)/g, $; $ = re.exec(*!*page_request.*/!*responseText); )
eval($[1]);
}
|
|

24.02.2010, 15:50
|
 |
Интересующийся
|
|
Регистрация: 24.02.2010
Сообщений: 13
|
|
ага, так тоже пробовал - не работает
вот самый примитивный скрипт из контентных страниц:
function isReady(chkBox)
{
if (chkBox.checked)
{
document.getElementById("submit").disabled = false;
} else {
document.getElementById("submit").disabled = true;
}
}
отдельно на этой странице работает, а как подгружаю в дизайн - нет
|
|

24.02.2010, 17:25
|
Кандидат Javascript-наук
|
|
Регистрация: 21.11.2008
Сообщений: 114
|
|
Вообще-то этот скрипт ничего и не делает. В нем только дефайнится функция. Покажите полностью, что вставляется в innerHTML.
|
|

25.02.2010, 07:19
|
 |
Интересующийся
|
|
Регистрация: 24.02.2010
Сообщений: 13
|
|
я понимаю, что это только функция. она выполняется по клику на чекбоксе
вот код того, что вставляется в innerHTML (код, может, и не самый рациональный, но работает, пока не пытаюсь вставить в другую страницу вышеописанным методом)
<script type="text/javascript">
function isReady(chkBox)
{
if (chkBox.checked)
{
document.getElementById("submit").disabled = false;
} else {
document.getElementById("submit").disabled = true;
}
}
function checkForm(form)
{
var rightAnswers = 0;
var score = 0;
var el, elName, value, type;
for (var i = 0; i < form.elements.length; i++)
{
el = form.elements[i];
elName = el.nodeName.toLowerCase();
value = el.value;
if (elName == "input")
{
type = el.type.toLowerCase();
switch (type)
{
case "checkbox" :
//
break;
case "radio" :
if (el.id == "q1a4" && el.checked === true) { rightAnswers++ };
if (el.id == "q2a2" && el.checked === true) { rightAnswers++ };
break;
}
}
}
score = rightAnswers / 2;
document.getElementById("results").innerHTML = "Правильных ответов: " + rightAnswers + "<br />Оценка: " + score;
document.getElementById("results").style.display="";
}
</script>
<form id="form1" name="form1" enctype="multipart/form-data">
<div id="content">
<table width="300" border="0">
<tr>
<td width="50%"><strong>2 + 2 = ?</strong></td>
<td width="50%"> </td>
</tr>
<tr>
<td>
<input type="radio" name="q1" id="q1a1" value="1" />
<label for="q1a1">1</label>
</td>
<td>
<input type="radio" name="q1" id="q1a3" value="3" />
<label for="q1a3">3</label>
</td>
</tr>
<tr>
<td>
<input type="radio" name="q1" id="q1a2" value="3" />
<label for="q1a2">2</label>
</td>
<td>
<input type="radio" name="q1" id="q1a4" value="4" />
<label for="q1a4">4</label>
</td>
</tr>
</table>
<table width="300" border="0">
<tr>
<td width="50%"><strong>5 * 5 = ?</strong></td>
<td width="50%"> </td>
</tr>
<tr>
<td>
<input type="radio" name="q2" id="q2a1" value="1" />
<label for="q2a1">4</label>
</td>
<td>
<input type="radio" name="q2" id="q2a2" value="2" />
<label for="q2a2">25</label>
</td>
</tr>
<tr>
<td>
<input type="radio" name="q2" id="q2a3" value="3" />
<label for="q2a3">16</label>
</td>
<td>
<input type="radio" name="q2" id="q2a4" value="4" />
<label for="q2a4">19</label>
</td>
</tr>
</table>
<p>
<input type="checkbox" id="ready" name="ready" onclick="javascript:isReady(this);" />
<label for="ready">Ответ подтверждаю</label>
<br />
<input id="submit" type="button" value="Проверить" disabled="1" onclick="checkForm(form1);" />
</p>
</form>
</div>
<div id="results" style="display: none;"> </div>
Последний раз редактировалось stryaponoff, 25.02.2010 в 07:22.
|
|

25.02.2010, 16:52
|
Кандидат Javascript-наук
|
|
Регистрация: 21.11.2008
Сообщений: 114
|
|
Под каким браузером вы смотрите этот код отдельно и в контенте? Вообще нужно это смотреть отладчиком - а так, это все гадание на кофейной гуще.
Последний раз редактировалось vk65535, 26.02.2010 в 12:20.
|
|
|
|