Вход

Просмотр полной версии : Ошибка только в Опере


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. есть что-то еще лень писать