09.07.2009, 12:16
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от pismenov
|
Ну не работает у меня
|
Возможно не работает из-за Tip(str[i]).call
Сообщение от pismenov
|
А можно поподробнее про эти строки:
|
function getStr(evt){ // в функцию передаётся событие evt для мозиллы
evt=evt||event; // Для кросс-браузерности. В ИЕ, Опера событие берётся из window.event, а в мозилле оно передаётся в функцию
var img=evt.target||evt.srcElement; // target-свойство события, которое возвращает элемент, который это событие сгенерировал. Для ИЕ это srcElement.
}
|
|
09.07.2009, 12:18
|
Новичок на форуме
|
|
Регистрация: 09.07.2009
Сообщений: 8
|
|
Спасибо всем, буду разбираться.
|
|
09.07.2009, 12:23
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Переписывай так:
var stroka = 'myimg,myimg2';
var arr = stroka.split(",");
var img = new Array();
for (var i=0; i<arr.length; i++){
img[i] = document.getElementById(arr[i]);
xAddEvt(img[i],'mouseover',getStr);
xAddEvt(img[i],'mouseout',UnTip);
}
function getStr(evt){
evt=evt||event;
var img=evt.target||evt.srcElement;
Tip('<img src="'+ img.getAttribute('src') +'" width="100">');
}
function xAddEvt(e,eventType,eventListener){
if(e.addEventListener)e.addEventListener(eventType,eventListener,false);
else if(e.attachEvent)e.attachEvent('on'+eventType,eventListener);
}
Сообщение от pismenov
|
Ну не работает у меня
|
Сори, чёт я перепутал... Твой вариант правельный.
Последний раз редактировалось B~Vladi, 09.07.2009 в 12:25.
|
|
09.07.2009, 16:10
|
Новичок на форуме
|
|
Регистрация: 09.07.2009
Сообщений: 8
|
|
Не могу понять в чем дело. Вообщем в Opera и IE данный код работает, в mozilla ни в какую!
<html>
<head>
</head>
<body>
<img id="myimg" src="kia_spectra_1.jpg">
<img id="myimg2" src="top-left.jpg">
<img id="myimg3" src="apache_pb2.gif">
<script type="text/javascript" src="wz_tooltip.js"></script>
<script type="text/javascript">
var xmlHttp = false;
function createRequest() {
try {
xmlHttp = new XMLHttpRequest();
} catch (e) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e2) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e3) {
xmlHttp = null;
}
}
}
if (xmlHttp == null)
alert("Ошибка создания xmlHttp объекта!");
}
function getRequest() {
createRequest();
var e = 'tooltip.php';
xmlHttp.open("GET",e,true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}
function updatePage() {
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
var stroka = response;
var arr = stroka.split(",");
for (i=0; i<arr.length; i++)
{
var img = new Array();
var e = new Array();
img[i] = document.getElementById(arr[i]);
if (img[i])
{
e[i] = img[i].getAttribute("src");
img[i].str = '<img src="'+ e[i] +'" width="100">';
if (img[i].addEventListener)
{
alert('firefox or opera');
img[i].addEventListener('mouseover',getStr,false);
img[i].addEventListener('mouseout',getStrUn,false);
}
else
{
img[i].attachEvent('onmouseover',getStr);
img[i].attachEvent('onmouseout',getStrUn);
}
}
}
function getStr(evt){
evt=evt||event;
var target=evt.target||evt.srcElement;
Tip(target.str);
}
function getStrUn(evt){
evt=evt||event;
var target=evt.target||evt.srcElement;
UnTip();
}
}
}
getRequest();
</script>
</body>
</html>
Смысл в том, чтобы послать запрос серверному скрипту, получить от него данные из базы, в данном случае id элементов и по этим id применить функции Tip и UnTip на события onmouseover(out) для img. Mozilla ничего не делает, в консоли ошибок нет.
Запрос от сервера приходит, проверял alert(). Если вставить alert после
if (img[i].addEventListener)
{
, то Mozilla выводит сообщение один раз, а Opera 3 раза(в таблице три записи).
|
|
09.07.2009, 16:11
|
Новичок на форуме
|
|
Регистрация: 09.07.2009
Сообщений: 8
|
|
Методом тыка удалось выяснить что в mozilla второй раз цикл не выполняется... FireBugом посмотрел - ошибок нема... Что за аномалия?
Последний раз редактировалось pismenov, 09.07.2009 в 16:30.
|
|
09.07.2009, 16:50
|
Новичок на форуме
|
|
Регистрация: 09.07.2009
Сообщений: 8
|
|
Проблему решил. Проверку состояния
if (xmlHttp.readyState == 4) {
закрыл за циклом. Всем большое спасибо.
|
|
09.07.2009, 16:53
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Присмотрись-ка... Это твой код, но немножко переработан:
function getStr(evt){
evt=evt||event;
var img=evt.target||evt.srcElement;
Tip('<img src="'+ img.getAttribute('src') +'" width="100">');
}
function xAddEvt(e,eventType,eventListener){
if(e.addEventListener)e.addEventListener(eventType,eventListener,false);
else if(e.attachEvent)e.attachEvent('on'+eventType,eventListener);
}
function getRequest() {
var xmlHttp=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4)updatePage(xmlHttp.responseText);}
xmlHttp.open('GET','tooltip.php',true);
xmlHttp.send(null);
}
function updatePage(stroka){
var arr = stroka.split(',');
for (var i=0; i<arr.length; i++){
var img = document.getElementById(arr[i]);
xAddEvt(img,'mouseover',getStr);
xAddEvt(img,'mouseout',UnTip);
}
}
getRequest();
Чувствуешь разницу в размере?! Давай пиши грамотно.
Здесь вроде ошибок нет... не тестил если чесно... Попробуй его.
Последний раз редактировалось B~Vladi, 10.07.2009 в 11:04.
|
|
10.07.2009, 03:07
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
B~Vladi,
расскажи, зачем нужна переменная img в getStr, если она используются один раз. Что толку от такой "оптимизации", если после компрессора будет тоже самое.
|
|
10.07.2009, 06:21
|
Новичок на форуме
|
|
Регистрация: 09.07.2009
Сообщений: 8
|
|
B~Vladi, спасибо за помощь!
|
|
10.07.2009, 11:02
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Riim
|
расскажи, зачем нужна переменная img в getStr, если она используются один раз.
|
Чтобы человек понял что к чему.
Сообщение от Riim
|
Что толку от такой "оптимизации", если после компрессора будет тоже самое.
|
Не то же самое. В его коде было много лишних строк/переменных/действий. Оптимизация делалась не для урезания байтов, а для правильной работы скрипта.
А это
Сообщение от B~Vladi
|
Чувствуешь разницу в размере?!
|
просто как "из этого вытекающее".
|
|
|
|