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

Печать RSS
423

Автор
Голубые штаны
0
Посоветуйте, в чем может быть проблема.
Скрипт маскировки данных:
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>
Изменил: Дмитрий (12.03.2011 / 17:23)
Автор
Голубые штаны
0
НО, теперь, когда этот джаваскрипт находится внутри функции, он перестал работать именно в Мозилле всех версий. В других браузерах все корректно работает.
В чем может быть причина?
Пример: http://soostar.net/id1 (Нажмите на "Показать подробную информацию" или "Статистика" или "Активность на сайте")

Junior Developer
0
Я одолжу код для себя )) ты не против?
F

Землянин
0
Может я что то не так понял, но почему не сделать так:

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>
Изменил: fhgdfhdfhdf (15.03.2011 / 10:45)
Автор
Голубые штаны
0
4. 6680, если честно, я ничего не понял в твоем джаваскрипте.
F

Землянин
0
$(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 на других не знаю работает ли...

Пацак
0
Есть такая трабла с мозилой, плавали, знаем... 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>'; 
}
В

Чатланин
0
Автор, ты в своем скрипте как раз jquery и не используешь. Перепиши код на jquery и всё будет работать.

Дедушка
0
1. dima.london, смысл того что ты подключаешь JQuery, а в итоге используешь самый линейный JS и извращаешься?)
Пиши на JQuery, работает в абсолютно любом браузере одинакого

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