Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает скрипт в FireFoxe, но в IE все работает.... 
V
    Опции темы
froggy82
Дата 23.4.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 25.9.2006
Где: Архангельск

Репутация: нет
Всего: нет



Итак, у меня есть проблемка, скрипт не работает в броузере FireFox, (дрожание картинки при наведении)...Но при открытии в IE все замечательно работает...
В страничке использую <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Вот собственно сам код скрипта:
Код

// JavaScript Document
var rector=3


var stopit=0 
var a=1

function init(which){
stopit=0
shake=which
shake.style.left=0
shake.style.top=0
}

function rattleimage(){
if ((!document.all&&!document.getElementById)||stopit==1)
return
if (a==1){
shake.style.top=parseInt(shake.currentStyle.top)+rector
}
else if (a==2){
shake.style.left=parseInt(shake.style.left)+rector
}
else if (a==3){
shake.style.top=parseInt(shake.style.top)-rector
}
else{
shake.style.left=parseInt(shake.style.left)-rector
}
if (a<4)
a++
else
a=1
setTimeout("rattleimage()",20)
}

function stoprattle(which){
stopit=1
which.style.left=0
which.style.top=0
}


Помогите, наведите на путь истинный smile 
PM MAIL ICQ   Вверх
Mymik
Дата 23.4.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 11
Всего: 78



когда указываешь значение для (к примеру) shake.style.left то нужно еще в конце дописывать "px" а иначе мозилла не знает что это за числа.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
froggy82
Дата 23.4.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 25.9.2006
Где: Архангельск

Репутация: нет
Всего: нет



Mymik, неа, перестал работать и в IE. Или не там расставил.... скажи где именно нужно ставить px?
PM MAIL ICQ   Вверх
Wolf1994
Дата 23.4.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Точку с запятой ещё можно поставить в конце строк. И обращаться к элементам по id, а не имени, IMHO.
PM MAIL WWW   Вверх
Mymik
Дата 23.4.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 11
Всего: 78



Цитата(Wolf1994 @  23.4.2007,  10:36 Найти цитируемый пост)
Точку с запятой ещё можно поставить в конце строк. 

+1
Цитата(Wolf1994 @  23.4.2007,  10:36 Найти цитируемый пост)
И обращаться к элементам по id, а не имени, IMHO. 

А где ты у него увидел такое ??? smile 


froggy82, а где ты определяешь переменную shake ???
И currentStyle(19 строка твоего кода) работает только в IE ??? замени на style


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Wolf1994
Дата 23.4.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Цитата(Mymik @  23.4.2007,  13:37 Найти цитируемый пост)
А где ты у него увидел такое ???

Sorry. Проглядел присваивание shake'у... Думал, что это имя...
PM MAIL WWW   Вверх
froggy82
Дата 23.4.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 25.9.2006
Где: Архангельск

Репутация: нет
Всего: нет



Mymik
Wolf1994
все равно не работает, при добавлении px, скрипт вообще не работает.
PM MAIL ICQ   Вверх
Wolf1994
Дата 23.4.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



froggy82, прошу предоставить весь скрипт целиком, вместе с HTML-кодом.
PM MAIL WWW   Вверх
Mymik
Дата 23.4.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 11
Всего: 78



froggy82, убери добавление строчки "px" и покажи код целиком. Или хотя бы покажи код ошибки в FF... 

У меня вызывает подозрение строчка 19 (currentStyle) это свойство доступно только в IE в Gecko нужно обращаться к getComputerStyle.
Если это не поможет, тогда надо смотреть весь код. Ну или хотя бы немного больше кода.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
froggy82
Дата 24.4.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 25.9.2006
Где: Архангельск

Репутация: нет
Всего: нет



Mymik
Wolf1994, Итак вот код страницы, где должен работать скрипт:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script src="java.js" language="JavaScript1.2" type="text/javascript"></script>
</head>
<body>
<a href="http://www.russianpost.ru/resp_engine.aspx?Path=PORTAL/RU/Home" target="IhrFrame"><img src="images/LOGO-RP.gif" class="shakeimage" onMouseover="init(this);rattleimage()" onMouseout="stoprattle(this)" vspace="94" alt="Почта России" align="middle" border="0"></a>
<style type="text/css">
<!--
.shakeimage{
    position:relative
}
-->
</style>
</body>


А вот сам сценарий java.js
Код

var rector=3 
var stopit=0 
var a=1
function init(which){
stopit=0
shake=which
shake.style.left=0
shake.style.top=0
}
function rattleimage(){
if ((!document.all&&!document.getElementById)||stopit==1)
return
if (a==1){
shake.style.top=parseInt(shake.style.top)+rector}
else if (a==2){
shake.style.left=parseInt(shake.style.left)+rector}
else if (a==3){
shake.style.top=parseInt(shake.style.top)-rector}
else{
shake.style.left=parseInt(shake.style.left)-rector}
if (a<4)
a++
else
a=1
setTimeout("rattleimage()",50)
}

function stoprattle(which){
stopit=1
which.style.left=0
which.style.top=0
}



PM MAIL ICQ   Вверх
Wolf1994
Дата 24.4.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Не уверен... Но я использую: this.id + document.getElementById ... Хотя, может, можно и так - по объекту...
PM MAIL WWW   Вверх
Replicator
Дата 24.4.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 30.4.2006
Где: Outer Heaven

Репутация: нет
Всего: нет



Проблема в том, что в Firefox'е при считывании значения shake.style.top мы получаем что-то вроде '10px', а не '10'. А строку '10px' нельзя отпарсить как целое, так как мешает 'px'. Ошибки в строках 

Код

  if (a == 1) {
    shake.style.top = parseInt(shake.style.top) + rector; //здесь
  } else if (a == 2) {
    shake.style.left = parseInt(shake.style.left) + rector; //здесь
  } else if (a == 3) {
    shake.style.top = parseInt(shake.style.top) - rector; //здесь
  } else {
    shake.style.left = parseInt(shake.style.left) - rector; //здесь
  }


Так что при помощи строковых функций или регулярных выражений убирайте с конца строку 'px' и оставшееся уже используйте как число. Ну и во вторых, используйте не 0, 10 и т.п., а как уже было сказано, '0px', '10px' и т.п. Это работает и в IE, и в Opera.
--------------------
 
PM WWW ICQ   Вверх
Mymik
Дата 24.4.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 11
Всего: 78



Replicator, parseInt нормально распарсивает значение (оно парситься до первого знака которое не есть число. Т.е. parseInt("10px") == 10, и parseInt("10px1") == 10)


froggy82, В твоем коде добавил в строки где изменяется значения style.top и т.д. добавление строки "px" и все начало работать
Код

    if (a==1){
        shake.style.top=parseInt(shake.style.top)+rector+"px";
    }
    else if (a==2){
        shake.style.left=parseInt(shake.style.left)+rector+"px";
    }
    else if (a==3){
        shake.style.top=parseInt(shake.style.top)-rector+"px";
    }
    else{
        shake.style.left=parseInt(shake.style.left)-rector+"px";
    }

Без добавление "px" по какой-то причине значение не записывались в style.top и т.д. До добавления там хранились 0pt и после добавления там зранилось "0pt" почему... не знаю. После изменения в виде добавление "px" стало все работать.

P.S. ставь alert'ы чтобы проверять почему не работает. Очень облегчишь свою работу

Это сообщение отредактировал(а) Mymik - 24.4.2007, 18:40


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
froggy82
Дата 25.4.2007, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 25.9.2006
Где: Архангельск

Репутация: нет
Всего: нет



Цитата(Mymik @ 24.4.2007,  18:38)


P.S. ставь alert'ы чтобы проверять почему не работает. Очень облегчишь свою работу

 smile Спасибо, все стало очень гуд! Как раз вовремя... 
Про алерты обязательно запомню, вопросов будет намного меньше....
PM MAIL ICQ   Вверх
Wolf1994
Дата 25.4.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Вставлю слово, напоследок  smile По-моему, парсить от "px" - не нужно. Никогда этого не делал и все скрипты прекрасно работали в FF.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0985 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.