Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как передать значение из цикла за его пределы для исполнения в java-script

Сообщения:  [1-6] 

 
 автор: retsoul   (24.01.2007 в 03:14)   письмо автору
 
   для: Владимир22   (24.01.2007 в 00:41)
 

Часть ключевого кода я уже описал, это генерация скрипта "ПХП" идентификаторов для ссылки и для слоя(<div>).
Пусть айдишник для ссылки = "12345", а константа для слоя = "d";
Тогда:

<div id="d12345">...<a id="12345" href="url" onclick="func(this.id)" >url</a>...</div>

Скрипт, который будет обрабатывать любой id:

<script type="text/javascript">
<!--
function func(elemID) {
// получаем id ссылки и => прибавля константу имеем id слоя:
  var divElemID = "d" + elemID;
  var Elem = document.getElementById(divElemID);
// всё, дальше можно обращаться к слою при помощи переменной Elem и проводить с ним различные действия.
...
}
//-->
</script>


Этот скрипт работает при нажатии на ссылку, когда событие "онклик" передаёт скрипту айдишник. Скрипт работает в фаирфоксе, опере и ие. У меня используется для скрытий/отображений слоёв с почти случайными айдишниками на странице.

Достаточно его прикрепить к странице, например между <head></head>.

А на ПХП, в цикле теперь можно выводить только элемент див и ссылку внутри него:

<?
for($i=0;$i<100;$i++) {
// . . .
echo "<div id=\"d".($i+1)."\"><a id=\"".($i+1)."\" href=\"$url\" onclick=\"func(this.id)\">$url</a></div>";
// . . .
}
?>


Вся сложность в том , что функция в скрипте выполняет несколько действий с несколькими Id разных блоков одного номера в цикле.
Вот это у меня сейчас стои в цикле и всё работает (но слишком много кода, а всё просто повторяется под разными номерами цикла)


Для решения этой проблемы в javascript -е вводишь дополнительные переменные по такому же образцу, только тогда, тебе надо будет прописывать вместо одной константы, четыре или больше.
То есть, например - divElemID1, divElemID2, divElemID3, divElemID4. С разными начальными(конечными) константами: "d", "e", "f", "g".

.

   
 
 автор: Lelik   (24.01.2007 в 00:59)   письмо автору
 
   для: Владимир22   (24.01.2007 в 00:41)
 


<script>
window.onload = function(){
d = document;
contentElem = d.getElementById('contayner')
k=0;
for(i=0; i<contentElem.childNodes.length; i++){
if(contentElem.childNodes[i].nodeType==1){
//предыдущими действиями мы выбрали только теги, далее выбираем необходимый
if(contentElem.childNodes[i].id=="a"+k){
//делаем то, что неоходимо с выбраным элементом
d.getElementById('a'+k).style.display = "none";
}
k++;
}

}
</script>
<div id="contayner">
<?php
for($j=0$j<количства_выводимых_записей_в_бд$j++){
echo 
"<div id=\"a".$j."\">my div".$j."</div>";
}
?>
</div>

   
 
 автор: Владимир22   (24.01.2007 в 00:41)   письмо автору
 
   для: retsoul   (23.01.2007 в 02:52)
 

Что-то не могу разобраться, что и куда вставлять.
Вся сложность в том , что функция в скрипте выполняет несколько действий с несколькими Id разных блоков одного номера в цикле.
Вот это у меня сейчас стои в цикле и всё работает (но слишком много кода, а всё просто повторяется под разными номерами цикла)
<SCRIPT language=JavaScript>
function Disp_<?=$i+1?>() {
ma=document.getElementById("<?=$i+1?>");
ma1=document.getElementById("s<?=$i+1?>");
ma2=document.getElementById("r<?=$i+1?>");
ma3=document.getElementById("g<?=$i+1?>");
ma.style.display="block";
ma1.style.display="none";
ma2.style.color="#D20000";
ma3.style.color="#D20000";
}
</SCRIPT>
Как всё таки можно вывести это скрипт из цикла и передать номер каждой выводимой записи из бызы в этот скрипт для выполнения действий в пределах только этой - каждой конкретной записи?

   
 
 автор: retsoul   (23.01.2007 в 02:52)   письмо автору
 
   для: Владимир22   (22.01.2007 в 17:42)
 

Есть ещё одно интересное решение:
В цикле я вижу у тебя есть ссылка, с нажатием на которую вызывается функция.
Идея в том, что можно генерировать случайный id этой ссылки, а id элемента "дива" будет равен какой-нибудь константе + id ссылки, то есть:

<div id="d12345"><a id="12345" href="url" onClick="func(this.id)">url</a></div>

и при нажатие на ссылку в вызываемую функцию будет передоваться id ссылки, прибавляя к константе полученный идентификатор у нас получается "айди дива" с которым уже можно теперь обращаться.

Соответственно уже не нужно держать скрипт с функцией в цикле.

   
 
 автор: Lelik   (22.01.2007 в 17:51)   письмо автору
 
   для: Владимир22   (22.01.2007 в 17:42)
 

во-первых ид должен стартовать с буквы div id как <?="а".$i+1?>
во-вторых скрипт выносится в тег <head>

<head>
...
<script src="myscript.js"></script>
</head>


и примерно такой код

d = document;
contentElem = d.getElementById('идентификатор_блока, в который выводятся записи из бд')
k=0;
for(i=0; i<contentElem.childNodes.length; i++){
if(contentElem.childNodes[i].nodeType==1){
//предыдущими действиями мы выбрали только теги, далее выбираем необходимый
if(contentElem.childNodes[i].id=="a"+k){
//делаем то, что неоходимо с выбраным элементом
}
k++;
}
}

   
 
 автор: Владимир22   (22.01.2007 в 17:42)   письмо автору
 
 

Есть такая проблема:
в цикле выводятся записи базы, и в этом же цикле каждая запись (помечена в div id как <?=$i+1?> работает с джава-скриптом. При выводе страницы получается много кода - каждая запись идёт с одинаковым большим скриптом(только номер разный).
Можно ли как-то вынести это скрипт за цикл и передавать ему только номер для исполнения в каждой записи?
Упрощённый пример кода для понимания:
<?
$res
=mysql_query("select * from list order by 'date' desc");
for(
$i=0;$i<100;$i++){
$url=mysql_result($res$i'url');
echo 
"<div id=$i+1><a href='$url' onClick="Dis$i+1();">$url</a></div>
<SCRIPT language=JavaScript>
function Dis<?=
$i+1?>() {
ma=document.getElementById("
<?=$i+1?>");
 и т.д. много всего....
}
</SCRIPT>";
}
?>

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования