Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: js - открыть/скрыть описание
 
 автор: Blizard   (15.08.2011 в 14:20)   письмо автору
 
 

Пытаюсь реализовать открытие и скрытие описания товара на js, описание открывается, но не стирается.

Доктайп:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

php переменная описания $sa[$i] где $i - номер товара
$fg - само описание, которое берется из базы

$sa[$ci] ="&lt;span onclick=\'skr(".$i.")\'&gt;/ Скрыть описание.. /&lt;span/&gt;".$fg;
$sa[$ci] = str_replace("\r\n"," ",$sa[$i]);
unset($fg);


Дальше js ф-ия skr() которая должна стирать описание


          function skr(x)
          {
               document.getElementById("n"+x).innerHTML="";
          }


Картинка, при клике по которой добавляется описание:


<img src="img/qw1.png" onclick="document.getElementById('n<?=$i;?>').innerHTML='<?=$sa[$i];?>'" alt="Описание" /> 


ну и собственно сам контейнер в который добавляется описание:


<div class="search-0">
            <br />
            <span class="zkr" id="n<?=$i;?>"></span>
 </div>


Скажите пожалуйста, где тут ошибка может быть?
P.s. валидатор показывает валидность кода 100%

  Ответить  
 
 автор: cheops   (15.08.2011 в 14:45)   письмо автору
 
   для: Blizard   (15.08.2011 в 14:20)
 

А вызов skr() вообще происходит? Добавьте туда alert(), у меня такое ощущение, что до него дело вообще не доходит. Лучше в onclick подставить функцию, которая отображает/скрывает текст... причем текст лучше хранили бы не отдельно, а прямо в тэге <span></span>, манипулируя не его содержимым, а его видимостью через каскадные таблицы стилей. У вас бы система вся упростилась бы, приобрела наглядность и стабильность.

  Ответить  
 
 автор: Blizard   (15.08.2011 в 14:57)   письмо автору
 
   для: cheops   (15.08.2011 в 14:45)
 

если через css делать видимость/невидимость блока, то мне придется всю страницу полностью переписать... да и по коду меньше, когда текст в php

alert() я уже ставил, но не доходит до него дело...

  Ответить  
 
 автор: cheops   (15.08.2011 в 15:06)   письмо автору
 
   для: Blizard   (15.08.2011 в 14:57)
 

По коду абсолютно так же, какая разница где текст у вас хранится в JS или в структуре документа (последнее даже лучше для поисковых роботов - они JS разбирать не будут). Страницы переделывать не нужно, вы же имеете возможность менять стили через JS, просто меняйте статус style.display и все.

  Ответить  
 
 автор: Blizard   (15.08.2011 в 15:12)   письмо автору
 
   для: cheops   (15.08.2011 в 15:06)
 

Согласен, но как раз эта страница от роботов закрыта, потому что дублируется контент.

я нашел причину ошибки, но не могу понять из-за чего это стало причиной

вобщем вот полностью js на этой странице такой


          <script type="text/javascript">


          function skr(x)
          {
               document.getElementById("n"+x).innerHTML="";
          }

          function al()
          {
               alert("Для того, чтобы заказывать товар, вам необходимо зайти в личный кабинет. \r\n \r\n Если вы еще не зарегистрированы, то пожалуйста, зарегистрируйтесь!");
          }

          function alf()
          {
               alert("Дождитесь выполнения вашего прошлого заказа!");
          }

          function getXmlHttp(){
      var xmlhttp;
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
          xmlhttp = false;
        }
      }
      if (!xmlhttp &amp;&amp; typeof XMLHttpRequest!='undefined') {
        xmlhttp = new XMLHttpRequest();
      }
      return xmlhttp;
    }

          function vote(h,t,v) {
        var req = getXmlHttp()  

        req.onreadystatechange = function() {  

            if (req.readyState == 4) { 
     
                if(req.status == 200) { 
                                    var tm = req.responseText.split("^");
                                    if (tm[0] == 1)
                                           {
                                          document.getElementById("to"+tm[1]).innerHTML = "&lt;span class=\'nst\'&gt;товар добавлен в корзину&lt;/span&gt;";
                                           }
                                    if (tm[0] == 2)
                                           {
                                          document.getElementById("to"+tm[1]).innerHTML = "&lt;span class=\'nst\'&gt;дождитесь выполнения вашего прошлого заказа!&lt;/span&gt;";
                                           }
                }
            }
        }
     
        req.open('GET', 'vote.php?tovarid='+h+'&amp;vkus='+v+'&amp;userid='+t, true);  
        req.send(null);  
       

    }

          </script>


когда убираю код ajaxa то все начинает работать...

  Ответить  
 
 автор: cheops   (15.08.2011 в 15:17)   письмо автору
 
   для: Blizard   (15.08.2011 в 15:12)
 

Вы когда при помощи JS добавляете на страницу JS-код, у вас не регистрируется обработчик, лучше обработчик назначать явно в JS-коде, присваивая имя функции onclick объекта, который вы получаете при помощи document.getElementById().

  Ответить  
 
 автор: Blizard   (15.08.2011 в 15:32)   письмо автору
 
   для: cheops   (15.08.2011 в 15:17)
 

Так не получится, я же не могу переменной php присвоить значение js

Я так понял вы имеете ввиду заменить


<img src="img/qw1.png" onclick="document.getElementById('n<?=$i;?>').innerHTML='<?=$sa[$i];?>'" alt="Описание" /> 


на


<img src="img/qw1.png" onclick="add('<?=$i;?>')" alt="Описание" /> 


и потом в js сделать


function add(y)
        {
       document.getElementById('n'+y).innerHTML='<?=$sa[(вот тут как впихнуть y ?)];?>'; 
       }


или в пхп цикле сделать присвоение всех описаний переменным js?

Или я вас всётаки не так понял? )))

  Ответить  
 
 автор: cheops   (15.08.2011 в 16:12)   письмо автору
 
   для: Blizard   (15.08.2011 в 15:32)
 

>Так не получится, я же не могу переменной php присвоить значение js
Почем нет? AJAX вы разве для другой какой-то цели используете?

  Ответить  
 
 автор: Blizard   (15.08.2011 в 16:20)   письмо автору
 
   для: cheops   (15.08.2011 в 16:12)
 

для этой конечно... но вобщем проблему решил, я когда HTML правил под XHTML то в ajaxe случайно && заменил на &amp;&amp; отсюда всё и пошло, но валидатор опять начал ругаться:


character "&" is the first character of a delimiter but occurred as data 
                     if (!xmlhttp && typeof XMLHttpRequest!='undefined') 

 This message may appear in several cases: 
You tried to include the "<" character in your page: you should escape it as "&lt;"
You used an unescaped ampersand "&": this may be valid in some contexts, but it is recommended to use "&amp;", which is always safe.
Another possibility is that you forgot to close quotes in a previous tag.


ну да ладно, всё равно страница закрыта в robots.txt

cheops, спасибо за помощь!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования