Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2012, 10:41
Аватар для Sveta
Профессор
Отправить личное сообщение для Sveta Посмотреть профиль Найти все сообщения от Sveta
 
Регистрация: 10.10.2012
Сообщений: 153

Аналог document.all
Добрый день!)
Столкнулась с проблемой:
если использовать
if (document.all) {}

то данный код работает только в IE.
Нашла такой код:
if (!document.all) {  //для работы в других браузерах
    document.constructor.prototype.__defineGetter__('all', function() { return document.getElementsByTagName('*'); } );  
    }

Данный код помог для браузера Opera
Но для FireFox он почему-то не работает...Как быть? Мне нужно чтобы и в IE и в Opera и в FireFox работало...Особенно FireFox!
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2012, 10:54
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

if ( !document.all ) {
    if ( Object.defineProperty ) {
        Object.defineProperty( document, "all", {
            get: function() {
                return document.getElementsByTagName('*');
            }
        });
    } else if ( Object.prototype.__defineGetter__ ) {
        Object.prototype.__defineGetter__.call( document, 'all', function() {
            return document.getElementsByTagName('*');
        });
    } else {
        document.all = document.getElementsByTagName('*');
    }
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2012, 11:03
Аватар для Sveta
Профессор
Отправить личное сообщение для Sveta Посмотреть профиль Найти все сообщения от Sveta
 
Регистрация: 10.10.2012
Сообщений: 153

Ваш код работает так же как и мой...но, скорее всего, это моя ошибка.
Я заметила, что если написать так
if (document.getElementsByTagName('*')) {alert(document.getElementsByTagName('*'));}

то FireFox возвращает [object HTMLCollection] то есть, на сколько я понимаю, то все работае..
и значит проблема в коде кот. содержится внутри?
if (document.getElementsByTagName('*')) {//IE
alert(document.getElementsByTagName('*'));
  if (event.srcElement.tagName == 'IMG' && event.srcElement.name=='mapimage'){

      pixelX = event.offsetX + originalLeft;
      pixelY = event.offsetY + originalTop;
      over(event.offsetX,event.offsetY);
        
     
      if ( flgfencing ) {
      drawFence (x1,y1,pixelX , pixelY );
      }
									     }
		   else
		   return false;
}

может я чего использую чего в FF нету?
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2012, 12:42
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Sveta,
srcElement только в IE, Opera, а в хроме и мозилле это target:
var target = event.srcElement || event.target;
if (target.tagName == 'IMG' && target.name=='mapimage'){
.....
Ответить с цитированием
  #5 (permalink)  
Старый 06.11.2012, 08:31
Аватар для Sveta
Профессор
Отправить личное сообщение для Sveta Посмотреть профиль Найти все сообщения от Sveta
 
Регистрация: 10.10.2012
Сообщений: 153

Dim@,
Спасибо)) только чтобы заработало я еще чуть код подправила:
evt = (evt) ? evt : ((window.event) ? window.event : null);
		if(evt) {
		 var target = (evt.target) ? evt.target : event.srcElement;
if (target.tagName == 'IMG' && target.name=='mapimage')
		
		   {
			alert('sdf');
			  pixelX = event.offsetX + originalLeft;
			  pixelY = event.offsetY + originalTop;
			  over(event.offsetX,event.offsetY);
				
			 
			  if ( flgfencing ) {
			  drawFence (x1,y1,pixelX , pixelY );
					}
			}
}

В итоге alert('sdf'); вызывается во всех браузерах..но в FF дальнейший код не работает...неужели еще что-то использую, что FF не поддерживает? сижу разбираюсь...
Ответить с цитированием
  #6 (permalink)  
Старый 06.11.2012, 09:42
Аватар для Sveta
Профессор
Отправить личное сообщение для Sveta Посмотреть профиль Найти все сообщения от Sveta
 
Регистрация: 10.10.2012
Сообщений: 153

Чтож, все разрешилось.
Рабочий код выглядит так:
if (document.all){ //IE
		  if (event.srcElement.tagName == 'IMG' && event.srcElement.name=='mapimage')
		   {
			  pixelX = event.offsetX + originalLeft;
			  pixelY = event.offsetY + originalTop;
			  over(event.offsetX,event.offsetY);
				
			 
			  if ( flgfencing ) {
			  drawFence (x1,y1,pixelX , pixelY );
			  }
			}
		
	else
	return false;
	}

//=========================================================
	else if (document.getElementById) { //for FF and Opera
		if (evt.target.tagName =='IMG'&& evt.target.name == 'mapimage') {
			pixelX = evt.pageX - originalLeft; 
			pixelY = evt.pageY - originalTop;
			over(evt.pageX,evt.pageY);
			if ( flgfencing ){
			drawFence (x1,y1, evt.pageX , evt.pageY );
			}
		}
		else return false;
	}

Может кому пригодится!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в яваскрипте - getElementById().innerHTML. а что её аналог в jquery-е ? dadli Общие вопросы Javascript 2 11.05.2012 12:55
нужна функция аналог slideToggle, только на Javascript Telnet jQuery 4 04.10.2011 11:43
аналог HTMLElement в IE? Researcher Events/DOM/Window 3 10.04.2011 14:04
аналог getElementsByName MaxB jQuery 2 04.08.2009 19:39