Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2010, 12:11
Аватар для stryaponoff
Интересующийся
Отправить личное сообщение для stryaponoff Посмотреть профиль Найти все сообщения от stryaponoff
 
Регистрация: 24.02.2010
Сообщений: 13

Выполнение скриптов на динамически загруженных страницах
Привет всем. Я с JS начал знакомиться недавно и еще очень много чего не знаю, поэтому, возможно, ламерский вопрос:

Есть страница с оформлением и куча страниц с контентом. Страницы с контентом подгружаются в страницу с оформлением, всё работает, и всё было бы хорошо, но на некоторых страницах с контентом есть свои скрипты, которые перестают работать на итоговой странице (когда контент объединяется с дизайном). Внимание, вопрос: "Как заставить эти скрипты работать?" Буду очень благодарен за любую помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2010, 13:18
Кандидат Javascript-наук
Отправить личное сообщение для vk65535 Посмотреть профиль Найти все сообщения от vk65535
 
Регистрация: 21.11.2008
Сообщений: 114

for (var re = /<script[^>]*>((?:(?!<\/script>).)*)/g, $; $ = re.exec(responseText); )
	eval($[1]);

Как-то так... возможно, есть способ получше.
Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2010, 13:46
Аватар для stryaponoff
Интересующийся
Отправить личное сообщение для stryaponoff Посмотреть профиль Найти все сообщения от stryaponoff
 
Регистрация: 24.02.2010
Сообщений: 13

Спасибо, конечно, но куда этот кусок кода вписывать?
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2010, 14:03
Кандидат Javascript-наук
Отправить личное сообщение для vk65535 Посмотреть профиль Найти все сообщения от vk65535
 
Регистрация: 21.11.2008
Сообщений: 114

Я так понял, страницы с контентом - это подгруженные аяксом куски html? Если так, то, очевидно, туда, где эти куски вставляются в innerHTML блока-контейнера (сразу после вставки, чтобы необходимые элементы уже были в дереве). А если не так, то уточните.
Ответить с цитированием
  #5 (permalink)  
Старый 24.02.2010, 14:24
Аватар для stryaponoff
Интересующийся
Отправить личное сообщение для stryaponoff Посмотреть профиль Найти все сообщения от stryaponoff
 
Регистрация: 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]);
}

Не помогло
Ответить с цитированием
  #6 (permalink)  
Старый 24.02.2010, 15:32
Кандидат Javascript-наук
Отправить личное сообщение для vk65535 Посмотреть профиль Найти все сообщения от vk65535
 
Регистрация: 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]);
}
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2010, 15:50
Аватар для stryaponoff
Интересующийся
Отправить личное сообщение для stryaponoff Посмотреть профиль Найти все сообщения от stryaponoff
 
Регистрация: 24.02.2010
Сообщений: 13

ага, так тоже пробовал - не работает

вот самый примитивный скрипт из контентных страниц:
function isReady(chkBox)
	{
		if (chkBox.checked)
		{
			document.getElementById("submit").disabled = false;
		} else {
			document.getElementById("submit").disabled = true;
		}
	}


отдельно на этой странице работает, а как подгружаю в дизайн - нет
Ответить с цитированием
  #8 (permalink)  
Старый 24.02.2010, 17:25
Кандидат Javascript-наук
Отправить личное сообщение для vk65535 Посмотреть профиль Найти все сообщения от vk65535
 
Регистрация: 21.11.2008
Сообщений: 114

Вообще-то этот скрипт ничего и не делает. В нем только дефайнится функция. Покажите полностью, что вставляется в innerHTML.
Ответить с цитированием
  #9 (permalink)  
Старый 25.02.2010, 07:19
Аватар для stryaponoff
Интересующийся
Отправить личное сообщение для stryaponoff Посмотреть профиль Найти все сообщения от stryaponoff
 
Регистрация: 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%">&nbsp;</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%">&nbsp;</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;">&nbsp;</div>

Последний раз редактировалось stryaponoff, 25.02.2010 в 07:22.
Ответить с цитированием
  #10 (permalink)  
Старый 25.02.2010, 16:52
Кандидат Javascript-наук
Отправить личное сообщение для vk65535 Посмотреть профиль Найти все сообщения от vk65535
 
Регистрация: 21.11.2008
Сообщений: 114

Под каким браузером вы смотрите этот код отдельно и в контенте? Вообще нужно это смотреть отладчиком - а так, это все гадание на кофейной гуще.

Последний раз редактировалось vk65535, 26.02.2010 в 12:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск