Всё началось с того, что я решил заняться изучением Javascript, давно я смотрел на этот язык программирования. И вот наконец-то свершилось! Я читаю Флэнагана(довольно хорошая книга, стоит заметить).
Немного почитав, я решил заняться практикой, используя свою любимую IDE — Visual Studio, — несколько простых примеров, надо что-то поинтереснее. О drag`n`drop. Написал запустил(писал в Visual Studio, которая автоматически сгенерировала шаблонную htm страничку), под IE6(!) всё заработало с пол абарота. Каково же было моё удивление когда FireFox 3.5 наотрез отказался перетаскивать элемент.
Чтобы не быть голосновным приведу код, нехило пострадавший в результате рядакастраций подгонов:
Значит надо идти от противного. Firebug в руки и дебажить.
Весело… почему-то в коде:
не устанавливается значение в dobj.style.left.
В общем в результате копаний и копи-пастингов, из-за чего внешний вид кода и пострадал, было выяснено, что во всё виновата строка:
стоит её убрать, и всё работает просто замечательно.
Хотя при её наличии браузер должен работать в «Almost Standards Mode» (Почти соответствует стандартам).
Чтоже это такое? Происки Майкрософт или партизанщина Firefox( и иже с ними). Я, к сожалению, не знаю.
Причина устранена, но кореньзла так и не ясен
Надеюсь кому-то данный топик, когда-то поможет сохранить немного столь драгоценного времени.
ЗЫ «Если вы владеете необходимой информацией, буду крайне благодарен».
UPD
Ответ найден, благодаря пользователям @SilenIT:
и Luge:
Немного почитав, я решил заняться практикой, используя свою любимую IDE — Visual Studio, — несколько простых примеров, надо что-то поинтереснее. О drag`n`drop. Написал запустил(писал в Visual Studio, которая автоматически сгенерировала шаблонную htm страничку), под IE6(!) всё заработало с пол абарота. Каково же было моё удивление когда FireFox 3.5 наотрез отказался перетаскивать элемент.
Чтобы не быть голосновным приведу код, нехило пострадавший в результате ряда
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Untitled Page</title>
<style>
.dragme{position:relative;}
</style>
</head>
<body>
<script language="JavaScript">
var ie=document.all;
var nn6=document.getElementById&&!document.all;
var x,y;
var dobj;
function movemouse(e)
{
if (dobj)
{
dobj.style.left = nn6 ? tx + e.clientX - x : tx + event.clientX - x;
dobj.style.top = nn6 ? ty + e.clientY - y : ty + event.clientY - y;
return false;
}
}
function selectmouse(e)
{
var fobj = nn6 ? e.target : event.srcElement;
if (fobj.className=="dragme")
{
dobj = fobj;
tx = parseInt(dobj.style.left+0);
ty = parseInt(dobj.style.top+0);
x = nn6 ? e.clientX : event.clientX;
y = nn6 ? e.clientY : event.clientY;
document.onmousemove=movemouse;
dbg('x:', x, ' tx:', tx);
return false;
}
}
document.onmousedown=selectmouse;
document.onmouseup=new Function("dobj=null");
</script>
<div id="testDiv" style="background-color:Purple;width:50px;height:50px" class="dragme">
</div>
</body>
</html>
* This source code was highlighted with Source Code Highlighter.
Значит надо идти от противного. Firebug в руки и дебажить.
Весело… почему-то в коде:
dobj.style.left = nn6? tx + e.clientX — x: tx + event.clientX — x;
dobj.style.top = nn6? ty + e.clientY — y: ty + event.clientY — y;
не устанавливается значение в dobj.style.left.
В общем в результате копаний и копи-пастингов, из-за чего внешний вид кода и пострадал, было выяснено, что во всё виновата строка:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" «www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>
стоит её убрать, и всё работает просто замечательно.
Хотя при её наличии браузер должен работать в «Almost Standards Mode» (Почти соответствует стандартам).
Чтоже это такое? Происки Майкрософт или партизанщина Firefox( и иже с ними). Я, к сожалению, не знаю.
Причина устранена, но корень
Надеюсь кому-то данный топик, когда-то поможет сохранить немного столь драгоценного времени.
ЗЫ «Если вы владеете необходимой информацией, буду крайне благодарен».
UPD
Ответ найден, благодаря пользователям @SilenIT:
Скорее второе. Ради доли рынка разработчики FF втихаря сделали в своем Quirks mode поддержку древних IEшных нестандартных фич, таких, как document.all, автодобавление «px» для размеров и координат без указания единиц в CSS и всякое прочее. Благодаря этому древние кривые страницы работают под ним без переделки. Но если указан любой нормальный доктайп, браузер резонно ожидает, что автор знал, что делал… :)
и Luge:
сами же написали, что FF должен стандартам следовать. Вот и добавьте px в размерность :)