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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Добавление событий
 
 автор: Nigma07   (28.02.2009 в 00:31)   письмо автору
 
 

Добрый вечер! Подскажите советом или примером...

Есть html файл с набором картинок:
......
<img class="simg" src="images/ld.jpg" alt="Первый" />
......

Отдельный *.js файл с следующей функцией, стартующей при событии onLoad:

function addOnSub() {
  var cDiv = document.getElementById("cDiv");
  var cimages = cDiv.getElementsByTagName("img");
  
for (var a=0; a<cimages.length;a++)
 {  cimages[a].id=a;
    cimages[a].onclick = addToFav; //вызов функции
 }
}


Нужно чтобы при событии onclick также передавался текущий id .
Что-то вроде такого cimages[a].onclick = addToFav (this.id); этот вариант не работает, а как правильно?
И попутно, как прописать тут же в for_е такую строку, только в нормальном рабочем виде
cimages[a].onfocus.style.cursor = "pointer";

  Ответить  
 
 автор: PAT   (28.02.2009 в 03:48)   письмо автору
 
   для: Nigma07   (28.02.2009 в 00:31)
 

function addOnSub ()
{
var cDiv_0 = document.getElementById ("cDiv"); //переменная с именем cDiv уже есть. Зачем путать и себя, и браузер?

var cimages = cDiv_0.getElementsByTagName ("img");
  
for (var a = 0; a < cimages.length; a++)
   {
   cimages [a].id = 's' + a; //значения id должны начинаться с буквы
   cimages [a].onclick = addToFav; //вызов функции ?? Это не вызов функции, это - НАЗНАЧЕНИЕ функции
   cimages [a].onfocus = myFunc;//назначаем ещё одну функцию, коя будет изменять стиль курсора. Текст её ниже.
   }
}

function myFunc (ev)
{
var evt = ev || event, obj = evt.target || evt.srcElement;
obj.style.curcor = 'pointer';
}


Определять id картинки, по которой кликнули, можно в самой функции addToFav, ничего ей не передавая. Функцию оформить надо аналогично вышенаписанной mуFunc, т.е. так:
function addToFav (ev)
{
var evt = ev || event, obj = evr.target || evt.srcElement;
var myID = obj.id;
//в переменной myID будет содержаться значение id картинки, по которой кликнули.
...
ну а тут пишете всё то, что должна делать эта функция.
И можете использовать myID,
или только цифры из значения id - отсеките первый символ: var NumID = myID.substr (1);
...
}

  Ответить  
 
 автор: Nigma07   (28.02.2009 в 19:38)   письмо автору
 
   для: PAT   (28.02.2009 в 03:48)
 

Спасибо огромное за подробное объяснение! Если б знал, что так распишите, не палил бы свое время сна зря.

P.S.Появился вопрос по поводу ...
var cDiv_0 = document.getElementById ("cDiv"); //переменная с именем cDiv уже есть. Зачем путать и себя, и браузер?


Может что-то не понимаю, почему переменная "cDiv уже есть"? Это вроде всего лишь id поля... У меня так много написано приложений, но правда на php, вроде работают без багов.

  Ответить  
 
 автор: PAT   (01.03.2009 в 00:57)   письмо автору
 
   для: Nigma07   (28.02.2009 в 19:38)
 

Запустите в любом браузере
<body onload="alert (cDiv.innerHTML)">
<div id="cDiv">XYZ</div>
</body>

И теперь продолжите утверждать, что cDiv - "это вроде всего лишь id поля"? :-)

  Ответить  
 
 автор: Nigma07   (03.03.2009 в 03:04)   письмо автору
 
   для: PAT   (28.02.2009 в 03:48)
 

Нужна еще помощь по поводу функции.
После перезагрузки системы строка var evt = ev || event, obj = evr.target || evt.srcElement; отказывается работать в M Firefox 3.0.6.
Поискал в инете, у всех такая проблема. Может че подскажите или мож есть какая альтернатива?

На форуме нашел такого вида :
 var evt = (window.event) ? window.event : document.createEvent ('MouseEvents'), obj = evt.target || evt.srcElement;

Не работает :( Или я не правильно обращаюсь!? Мне нужно value достать.

  Ответить  
 
 автор: PAT   (03.03.2009 в 03:20)   письмо автору
 
   для: Nigma07   (03.03.2009 в 03:04)
 

Какое именно value?
В вашем изначальном вопросе никаких value не было в принципе.


Что именно не работает?
В каком из браузеров?
<html>
<head>
<script>
function addOnSub ()
{
var cDiv_0 = document.getElementById ("cDiv");
var cimages = cDiv_0.getElementsByTagName ("img");
for (var a = 0; a < cimages.length; a++)
   {
   cimages [a].id = 's' + a;
   cimages [a].onclick = addToFav;
   cimages [a].onfocus = myFunc;
   }
}

function addToFav () {
var evt = (window.event) ? window.event : document.createEvent ('MouseEvents'), obj = evt.target || evt.srcElement;    
alert ('Делаем, что надо, зная id="' + obj.id + '" картинки, по которой кликнули");
}

function myFunc () {
var evt = (window.event) ? window.event : document.createEvent ('MouseEvents'), obj = evt.target || evt.srcElement;    
obj.style.curcor = 'pointer';
}

</script>
</head>
<body onload="addOnSub ()">
<div id="cDiv">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
</div></body>
</html>

  Ответить  
 
 автор: Nigma07   (03.03.2009 в 03:38)   письмо автору
 
   для: PAT   (03.03.2009 в 03:20)
 

Узнав о такой возможности, решил применить к select, оттуда и value. Id я тоже не могу достать.
При alert (obj.id) - перезагружается; При alert (obj) - 'undefined'; При alert (evt); - object MouseEvent

В других браузерах, все нормально(Opera Версия9.50, IE 7.0.57.30.13), а вот в Mozille никак.

Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6

  Ответить  
 
 автор: PAT   (03.03.2009 в 03:50)   письмо автору
 
   для: Nigma07   (03.03.2009 в 03:38)
 

>При alert (obj.id) - перезагружается

Где в моём коде вы увидели строку alert (obj.id) ?
Покажите!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!

Вас попросили посмотреть в ваших браузерах именно ТОТ КОД, КОТОРЫЙ ВЫЛОЖЕН, а не ваши персональные заморочки, никому не известные.
И попросили дать список тех браузеров, в которых НЕ РАБОТАЕТ (других, где всё нормально - не просили).

Вы в состоянии сделать ТОЛЬКО ТО, о чём просят?

Ведь просят не потому что "так хочется", а потому что помочь хотят.
И помочь хотят именно вам.
А вы, как нарочно, делаете всё НАОБОРОТ, будто не хотите получить помощь

  Ответить  
 
 автор: Nigma07   (03.03.2009 в 04:03)   письмо автору
 
   для: PAT   (03.03.2009 в 03:50)
 

Да нет, не нарочно. Думал, что alert ('Делаем, что надо, зная id="' + obj.id + '" картинки, по которой кликнули"); и просто alert (obj.id ) одно и тоже.

Выложу все, что есть, если сильно замусорю, удалите пожалуйста пост.

Index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<title>Сдвинем недвижимое</title>
<link rel="stylesheet" type="text/css" href="./style/index.css">
<script src="./site_add/myajax.js" type="text/javascript"> </script>
<script src="./site_add/json.js" type="text/javascript"> </script>
<script src="./site_add/menu_search.js" type="text/javascript"> </script>
</head>
<div>
<div ><a href="http://localhost" title="Сдвинем недвижимое"> <img src="./image/domik.jpg" alt="Сдвинем недвижимое"></a>
</div>
</div>

<div id="poisk" class="brd">
<?php
include('./site_add/search.php');
?>
</div>

<div id="searching" class="loadv" style="display:none;">    search </div>
</html>

search.php
Выберите область:
<select onchange="search_menu(); return false;" name="oblsity">
<?php
header
("Content-type: text/html; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0"false); 

include (
'./site_add/sc_.inc.php');
$sql_="SELECT * FROM `Oblast`";
$result=mysql_query($sql_,$connect);
while (
$row mysql_fetch_assoc($result))

    {
$i=$row['name_oblast'];
print 
"<option value='o$row[Id_oblast]'> $i";

    }
?>
</select>


scsc.php - выборка данных, выводит такую строку {"myobl":[{"id":"1","name":"Донецк"},{"id":"3","name":"Горловка"},{"id":"4","name":"Макеевка"},{"id":"5","name":"Харцызск"}]}

menu_search.js
function search_menu(ev)
{
    var ad_adress; 
    var Poisk_T;
    
var evt = ev || event, obj = evt.target || evt.srcElement;
    var menu_city_value = obj.name;
    var menu_city_id = obj.value;
alert (obj.name);
alert (obj.value);
alert (obj.id);



var Poisk_a = document.getElementById("poisk");
    
if (menu_city_value == "oblsity") 
    {
        ad_adress="a";        
        if (Poisk_a.childNodes[5] || Poisk_a.childNodes[3]){delvespoisk(Poisk_a,1);}
    
    } else if (menu_city_value == "mycity")
        {    
             ad_adress="b";    
            if (Poisk_a.childNodes[5]){delvespoisk(Poisk_a,2);}
        }
    
var loading = document.getElementById("searching");
    loading.style.display = "block";


var xmlHttp = createRequest();
    
    var nocache = Math.random();
    xmlHttp.open('GET', 'site_add/scsc.php?search' + ad_adress + '='+ menu_city_id + '&nocache=' + nocache, true);

 xmlHttp.onreadystatechange = function() 
{    
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    { 
       loading.style.display = "none";
             
      var json = JSON.parse (xmlHttp.responseText);
    
      var Poisk_s = document.createElement("select");
          Poisk_s.onchange = search_menu;
          
          if (ad_adress=="a")
                    {
                        Poisk_s.name = "mycity";
                        Poisk_T = document.createTextNode("Выберите город:");
                  }
           else if (ad_adress=="b")
           {
               Poisk_s.name = "myrigion";
            Poisk_T = document.createTextNode("Выберите район:");
           }

        for (var i = 0; i <json.myobl.length; i++)
      { var Poisk_s1 = document.createElement("option");
        var Poisk_t = document.createTextNode(json.myobl[i].name);
                Poisk_s1.appendChild(Poisk_t);
                Poisk_s1.value = "c"+ json.myobl[i].id;
                Poisk_s.appendChild(Poisk_s1);
      }
       Poisk_a.appendChild(Poisk_T);
       Poisk_a.appendChild(Poisk_s);
   }
}
    xmlHttp.send(null);
}

function delvespoisk (Poisk_a1,intP)
{
    if (intP == "1")
    {
        if (Poisk_a1.childNodes[5]) for (var i=6; i>2; i--)    Poisk_a1.removeChild(Poisk_a1.childNodes[i]);
          else for (var a=4; a>2; a--)Poisk_a1.removeChild(Poisk_a1.childNodes[a]);
    }
        if (intP == "2")
    {
        for (var s=6; s>4; s--)    {Poisk_a1.removeChild(Poisk_a1.childNodes[s]);}
    }
}

  Ответить  
 
 автор: PAT   (03.03.2009 в 04:18)   письмо автору
 
   для: Nigma07   (03.03.2009 в 04:03)
 

Вам 03.03.2009 в 03:20 выложили код.
И попросили ответить на два вопроса - "Что именно не работает?" и "В каком из браузеров?"

Вы не поняли. Вы написали 03.03.2009 в 03:38 какую-то, извините, фигню про селекты и перечислили какие-то браузеры.

Вас ЕЩЁ РАЗ попросили запустить в ваших браузерах именно тот код, который выложен 03.03.2009 в 03:20 и ЕЩЁ РАЗ попросили ответить на два вопроса: "Что именно не работает?" и "В каком из браузеров?"

В ответ вы выкладываете какую-то "простыню".

Я, честно говоря, просто в шоке.

ТРЕТИЙ РАЗ спрашиваю - "Что именно не работает в том коде, который выложен мною 03.03.2009 в 03:20 и в каком из браузеров не работает?"

[поправлено модератором]

  Ответить  
 
 автор: Nigma07   (03.03.2009 в 04:34)   письмо автору
 
   для: PAT   (03.03.2009 в 04:18)
 

Никакой реакции в браузере в Mozilla Firefox 3.0.6 Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913
При нажатии на картинку она выделяется, только и всего.
Добавил в функцию
function addOnSub ()
{
var cDiv_0 = document.getElementById ("cDiv");
var cimages = cDiv_0.getElementsByTagName ("img");
alert (cimages.length);// эту строку, чтобы хоть как-то увидеть начало действий, но ничего не происходит.
for (var a = 0; a < cimages.length; a++)
{
cimages [a].id = 's' + a;
cimages [a].onclick = addToFav;
cimages [a].onfocus = myFunc;
}
}

  Ответить  
 
 автор: PAT   (03.03.2009 в 05:18)   письмо автору
 
   для: Nigma07   (03.03.2009 в 04:34)
 

<html>
<head>
<script>
function addOnSub ()
{
var cDiv_0 = document.getElementById ("cDiv");
var cimages = cDiv_0.getElementsByTagName ("img");
for (var a = 0; a < cimages.length; a++)
   {
   cimages [a].id = 's' + a;
   cimages [a].onclick = addToFav;
   cimages [a].onfocus = myFunc;
   }
}

function addToFav (evt) {
evt = window.event || evt, obj = evt.target || evt.srcElement;
alert ('ID=' + obj.id);
}

function myFunc (evt) {
evt = window.event || evt, obj = evt.target || evt.srcElement;   
obj.style.curcor = 'pointer';
}
</script>
</head>
<body onload="addOnSub ()">
<div id="cDiv">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
<img width="50" height="50" style="background: red">
</div></body>
</html> 

Проверяйте.

  Ответить  
 
 автор: Nigma07   (03.03.2009 в 05:26)   письмо автору
 
   для: PAT   (03.03.2009 в 05:18)
 

Супер! Работает и на своей простыне опробовал! Спасибо, Вам, за решение вопроса! Извините за мое непонимание! Как бы мне к Вам в ученики попасть!?

  Ответить  
Rambler's Top100
вверх

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