Некорректно работает Javascript

1. Дмитрий (12.03.2011 / 17:06)
Посоветуйте, в чем может быть проблема.
Скрипт маскировки данных:
echo '<script type="text/javascript">
    function nombersShow(){
        document.all.raw.style.display=\'\'
        document.all.raw.style.visibility=\'visible\'
        document.all.nombers.href="javascript:no mbersHide()"
    }
    function nombersHide(){
        document.all.raw.style.display=\'none\'
        document.all.raw.style.visibility=\'hidden\' 
        document.all.nombers.href="javascript:no mbersShow()"
    }
</script>';
Используется так:
<a href="javascript:no mbersShow()" id="nombers">Открыть скрытые данные</a>
<div id="raw" style="DISPLAY: none; VISIBILITY: hidden">
    ЗДЕСЬ СКРЫТЫЕ ДАННЫЕ
</div>
Соответственно, в заголовках должна быть подключена библиотека jQuery.
Я пользуюсь гугловской:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
Если использовать таким образом, то корректно работает во всех браузерах klass

Для того, чтобы использовать его несколько раз на странице и не прописывать постоянно одно и тоже, я поместил его в функцию, и добавил к нему уникальный идентификатро:
function maskJava($param) {
echo '<script type="text/javascript">
    function nombers' . $param . 'Show(){
        document.all.raw' . $param . '.style.display=\'\'
        document.all.raw' . $param . '.style.visibility=\'visible\'
        document.all.nombers' . $param . '.href="javascript:no mbers' . $param . 'Hide()"
    }
    function nombers' . $param . 'Hide(){
        document.all.raw' . $param . '.style.display=\'none\'
        document.all.raw' . $param . '.style.visibility=\'hidden\' 
        document.all.nombers' . $param . '.href="javascript:nombers' . $param . 'Show()"
    }
</script>';
}
где $param - и есть этот уникальный идентификатор.
Используется так:
$parametr = 'life';
maskJava($parametr);
<a href="javascript:nombers' . $parametr  . 'Show()" id="nombers' . $parametr  . '">Открыть скрытые данные</a> 
<div id="raw' . $parametr . '" style="DISPLAY: none; VISIBILITY: hidden"> 
    ЗДЕСЬ СКРЫТЫЕ ДАННЫЕ 
</div>


2. Дмитрий (12.03.2011 / 17:11)
НО, теперь, когда этот джаваскрипт находится внутри функции, он перестал работать именно в Мозилле всех версий. В других браузерах все корректно работает.
В чем может быть причина?
Пример: http://soostar.net/id1 (Нажмите на "Показать подробную информацию" или "Статистика" или "Активность на сайте")

3. Тимофей (12.03.2011 / 19:55)
Я одолжу код для себя )) ты не против?

4. fhgdfhdfhdf (15.03.2011 / 10:43)
Может я что то не так понял, но почему не сделать так:

js:
$(document).ready(function() {
     $('#gallery').hide();
     $('#svert').toggle(function() {
          $('#gallery').slideDown(2000);
          $(this).text('[Свернуть галлерею]')
     },function() {
          $('#gallery').slideUp(2000);
          $(this).text('[Развернуть галлерею]')
     });
}); // Конец ready


html:
<div id='svert'>[Развернуть галлерею]</div>        
  <div id="gallery">
   то что скрыть тут  
  </div>


5. Дмитрий (15.03.2011 / 11:36)
4. 6680, если честно, я ничего не понял в твоем джаваскрипте.

6. fhgdfhdfhdf (15.03.2011 / 21:09)
$(document).ready(function() { // функция дожидающаяся загрузки DOM
     $('#gallery').hide();     // ищет блок с ид gallery и прячет его
     $('#svert').toggle(function() { // отберает блок с ссылкой на свертывания развертывания скрытого блока и применяет к нему функцию
          $('#gallery').slideDown(2000); // говорит о том что после нажатия на ссылку через 2000 милисекунд появиться блок gallery методом slideDown
          $(this).text('[Свернуть галлерею]') // заменяет текст ссылки
     },function() { //функция скрывает обратно блок
          $('#gallery').slideUp(2000); // методом slideUp  за 2000 доли сек
          $(this).text('[Развернуть галлерею]') // заменяет текст ссылки
     });
}); // Конец ready 

Зная) из меня плохой учитель) обьясняю как умею) да, самое важное. для работы нужна библиотека JQuery 1.4.2 на других не знаю работает ли...

7. Роман (17.03.2011 / 14:47)
Есть такая трабла с мозилой, плавали, знаем... smile
Лечиться это так, меняем все строки, типа:
document.all.raw.style.display=\'\'

на

document.getElementById(\'raw\').style.display=\'\'

Добавлено через 05:25 сек.
В общем должно получиться так:
function maskJava($param) { 
echo '<script type="text/javascript"> 
    function nombers' . $param . 'Show(){ 
        document.getElementById(\'raw' . $param . '\').style.display=\'\' 
        document.getElementById(\'raw' . $param . '\').style.visibility=\'visible\'
        document.getElementById(\'nombers' . $param . '\').href="javascript:no mbers' . $param . 'Hide()"
    } 
    function nombers' . $param . 'Hide(){ 
        document.getElementById(\'raw' . $param . '\').style.display=\'none\' 
        document.getElementById(\'raw' . $param . '\').style.visibility=\'hidden\' 
        document.getElementById(\'nombers' . $param . '\').href="javascript:no mbers' . $param . 'Show()"
    } 
</script>'; 
}


8. Валерий (18.03.2011 / 07:28)
Автор, ты в своем скрипте как раз jquery и не используешь. Перепиши код на jquery и всё будет работать.

9. Женек (18.03.2011 / 11:54)
1. dima.london, смысл того что ты подключаешь JQuery, а в итоге используешь самый линейный JS и извращаешься?)
Пиши на JQuery, работает в абсолютно любом браузере одинакого

10. Роман (21.03.2011 / 09:39)
Что вы все к этому JQuery прицепились? Понимаю на большом портале или там где использование AJAX просто необходимо, можно подключить библиотеку. Ну нафига ее пихать везде где не поподя. Когда на много проще написать парочку своих JavaScript функций и не таскать за собой этот "хвост". imho...

11. Женек (21.03.2011 / 13:03)
10. Taurus, на JQuery эти функции будут гораздо проще, короче и будут работать во всех браузерах

12. Дмитрий (26.03.2011 / 14:38)
В принципе, я стараюсь отказываться от jQuery в пользу библы Mootools, так как 40% сайта уже написано именно на ней. Да и нравится она мне больше. Стараюсь совмещать Mootools+PHP. В принципе, мне нравятся ее классы.
З.Ы. Пример из 2 поста - давно устарел, его давность уже недели 2-3...

URL: https://visavi.net/topics/19660