Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Ошибка только в Опере (https://javascript.ru/forum/css-html-browser/12468-oshibka-tolko-v-opere.html)

mmc 19.10.2010 09:28

Ошибка только в Опере
 
Здравствуйте!
На главной страничке сайта krasich.ru есть "Задачка" шахматная.
Во всех браузерах фигуры перетаскиваются мышкой, а в опере - нет.
Ошибку выдаёт следующую:
Uncaught exception: TypeError: Cannot convert 'e' to object
Error thrown at line 4487, column 3 in <anonymous function: __moveDraggedPiece>(e):
    this.pieces[this.dragProperties.color][this.dragProperties.pieceIndex].el.style.left = (e.clientX - this.dragProperties.mouseX + this.dragProperties.pieceX) + 'px';
called from line 4959, column 119 in <anonymous function: __addGeneralEvents>(e):
    D_chessObjects[ind].__moveDraggedPiece(e);
called via Function.prototype.apply() from line 5249, column 5 in <anonymous function>():
    fn.apply(window.event.srcElement);


Ошибка указывает как я понял на вот эту функцию:

__moveDraggedPiece : function(e)
	{
		if(document.all)e = event;
		if(this.dragCountDownVar==5){	// Drag is in progress
			this.pieces[this.dragProperties.color][this.dragProperties.pieceIndex].el.style.left = (e.clientX - this.dragProperties.mouseX + this.dragProperties.pieceX) + 'px';
			this.pieces[this.dragProperties.color][this.dragProperties.pieceIndex].el.style.top = (e.clientY - this.dragProperties.mouseY + this.dragProperties.pieceY) + 'px';
		}
		
		if(this.dragDropProperties.active) {
			var obj = document.getElementById(this.dragDropProperties.id);
			
			obj.style.left = e.clientX - this.dragDropProperties.mouse.x + this.dragDropProperties.el.x;
			obj.style.top = e.clientY - this.dragDropProperties.mouse.y + this.dragDropProperties.el.y;
			
			
		}
	}

Помогите пожалуйста, не разбираюсь в JS

exec 19.10.2010 13:15

Замените третью строчку на это:

e = e || window.event;

mmc 19.10.2010 13:21

Стало перемещаться, но не так как должно быть. Можно сравнить с мозиллой, сейчас на сайте стоит исправленный вариант.

monolithed 19.10.2010 18:29

1. document.all - устаревшее обращение IE!
заменяйте на метод document.getElementById()

2. про e = e || window.event; exec правильно сказал +window.event.srcElement - тоже исправить / дополнить

3. в IE координаты можно получить из clientX/clientY, прибавив к ним scrollLeft/scrollTop.

4. есть что-то еще лень писать


Часовой пояс GMT +3, время: 14:23.