За последние 24 часа нас посетили 16743 программиста и 1693 робота. Сейчас ищут 855 программистов ...

Всплывающая надпись в конце строк

Тема в разделе "JavaScript и AJAX", создана пользователем SergKK, 17 дек 2013.

  1. SergKK

    SergKK Новичок

    С нами с:
    17 дек 2013
    Сообщения:
    2
    Симпатии:
    0
    Добрый.

    Не подскажете, где можно найти пример / как правильно сгенерировать запрос для поисковика, что-бы реализовать следующую задумку: при наведении на строку (строка - ссылка) в ее конце показывалась надпись.

    Пример:
    Код (Text):
    1.  
    2. <div><a href=#>строка номер один</a></div><div id="stroka" style="display: inline;">появляющаяся строка</div>
    3. <div><a href=#>строка номер два</a></div><div id="stroka" style="display: inline;">появляющаяся строка два</div>
    Есть примеры, с реализацией типа: onmouse - show, onmouseout - hide.
    Это прописывается в JS. Но, при наведении на строку 2 - выскакивает текст в строке 1. На сколько я понимаю, идет действие для 1-й строки, это прописано в JS.
    Если в JS писать для каждой строки
    Код (Text):
    1. <div id="stroka2">
    и т.д., то это в JS будет конструкций, сколько и строк. Как-то не красиво получается и громоздко.

    Как можно добиться показывание текста для каждой строки, написав это кратко в JS файле?
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    В документе нельзя делать элементы с одним id (у тебя id="stroka"), это Идентификатор.
    В обработчик события mouseover и прочих передаётся объект. Его используют для нахождения элемента, на который навели мышью. ID и не нужны.
    Покажи, приведи пример. Может, всё работает на самом деле.
     
  3. SergKK

    SergKK Новичок

    С нами с:
    17 дек 2013
    Сообщения:
    2
    Симпатии:
    0
    1) JS
    Код (Text):
    1. <script type=\"text/javascript\">
    2. <script type=\"text/javascript\">
    3. function defPosition(event) {
    4.     var x = y = 0;
    5.     if (document.attachEvent != null) {
    6.         x = window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
    7.         y = window.event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    8.     } else if (!document.attachEvent && document.addEventListener) {
    9.         x = event.clientX + window.scrollX;
    10.         y = event.clientY + window.scrollY;
    11.     }
    12.     return {x:x, y:y};
    13. }
    14. document.onmousemove = function(event) {
    15.     var event = event || window.event;
    16.     document.getElementById('hint').style.left = defPosition(event).x + 10 + \"px\";
    17.     document.getElementById('hint').style.top = defPosition(event).y - 10 + \"px\";
    18. }
    19.  
    20. function helpBox_on(title, text) {
    21.     document.getElementById('hint_title').innerHTML = title;
    22.     document.getElementById('hint').style.width = \"200px\";
    23.     document.getElementById('hint').style.border = \"1px solid red\";
    24.     document.getElementById('hint_title').style.padding = \"5px\";
    25.    
    26. }
    27.  
    28. function helpBox_on2(title, text) {
    29.     document.getElementById('hint_title2').innerHTML = title;
    30.     document.getElementById('hint').style.width = \"200px\";
    31.     document.getElementById('hint').style.border = \"1px solid red\";
    32.     document.getElementById('hint_title2').style.padding = \"5px\";
    33.    
    34. }
    35.  
    36. function helpBox_off() {
    37.     document.getElementById('hint_title').innerHTML = \"\";
    38.     document.getElementById('hint').style.width = 0;
    39.     document.getElementById('hint').style.border = 0;
    40.     document.getElementById('hint_title').style.padding = 0;
    41. }
    42.  
    43. function helpBox_off2() {
    44.     document.getElementById('hint_title2').innerHTML = \"\";
    45.     document.getElementById('hint').style.width = 0;
    46.     document.getElementById('hint').style.border = 0;
    47.     document.getElementById('hint_title2').style.padding = 0;
    48. }
    49.  
    50. </script>
    2) PHP
    Код (Text):
    1. <div style=\"display:inline;\">
    2.     <a href=\"http://usefulscript.ru\" onMouseOver=\"helpBox_on('hint')\" onMouseOut=\"helpBox_off()\">
    3.          хинт
    4.     </a>
    5. </div>
    6.  
    7. <div id=\"hint_title\" style=\"display: inline; background: green; padding: 0px;\">
    8. </div>
    9.  
    10. <br>
    11.  
    12. <div style=\"display:inline;\">
    13.    <a href=\"http://usefulscript.ru\" onMouseOver=\"helpBox_on2('hint2')\" onMouseOut=\"helpBox_off2()\">
    14.        хинт2
    15.    </a>
    16. </div>
    17.  
    18. <div id=\"hint_title2\" style=\"display: inline; background: green; padding: 0px;\">
    19. </div>
    3) На сколько я понимаю, нужно "загнать" в цикл "function helpBox_on", что-бы было: function helpBox_on1, function helpBox_on2, function helpBox_on3 и т.д.
    И вешаем на каждый новый div: onMouseOver=\"helpBox_on1('hint2')\", onMouseOver=\"helpBox_on2('hint2')\" и т.д.

    Правильно ли я поинмаю, что к примеру, если у меня около 500 строк, то JS файлик будет длинный?
    Вот в том и вопрос: как это победить и "минимизировать" кол-во кода.
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    А как насчёт jQuery, есть запрет на использование? С этой библиотекой делается на раз-два. Обработчики событий мыши вешаются сразу на группу элементов. Она популярна.
     
  5. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Можно химичить, писать своё.
    Код (PHP):
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>трудный путь</title>
    5. <meta charset="UTF-8">
    6. <style>
    7. .hint{display:none;}
    8. </style>
    9. <script>
    10.  
    11. function mouseOverCallback(e){//обработчик события mouseover
    12.     var hintSpan = e.target.getElementsByTagName('span');//выбираем скрытый элемент span
    13.     if(hintSpan[0]){
    14.         hintSpan[0].style.display = 'inline';
    15.         hintSpan[0].style.backgroundColor = 'green';
    16.     }
    17. }
    18.  
    19. function mouseOutCallback(e){//обработчик события mouseout
    20.     var hintSpan = e.target.getElementsByTagName('span');//выбираем скрытый элемент
    21.     if(hintSpan[0]) hintSpan[0].style.display = 'none';
    22. }
    23.  
    24. function init(){
    25.     var hrefsDiv = document.getElementsByClassName('hrefs');//контейнер для ссылок
    26.     for (var n=0; n<hrefsDiv.length; n++){//по всем контейнерам
    27.         var nodeList = hrefsDiv.item(n).getElementsByTagName('a');//все ссылки в контейнере
    28.         for (var i=0; i<nodeList.length; i++){//по всем ссылкам
    29.             var elA = nodeList.item(i);//элемент - ссылка
    30.             elA.addEventListener("mouseover", mouseOverCallback, false);//слушаем событие mouseover
    31.             elA.addEventListener("mouseout", mouseOutCallback, false);//слушаем событие mouseout
    32.         }
    33.     }
    34. }
    35. </script>
    36. </head>
    37. <body onload="init()">
    38.  
    39. <div class="hrefs">
    40.     <ul>
    41.         <li>[url="http://href1.ru"]подсказка к ссылке 1</span>[/url]</li>
    42.         <li>[url="http://href2.ru"]подсказка к ссылке 2</span>[/url]</li>
    43.         <li>[url="http://href3.ru"]подсказка к ссылке 3</span>[/url]</li>
    44.     </ul>
    45. </div>
    46.  
    47. </html>
    Но я не могу дать гарантию, что это будет работать на всех браузерах, особенно в старых IE.

    Можно в каждой ссылке прописывать onMouseOver="mouseOver(1)", передавать какой-нибудь номер или ещё чего для последующего поиска элемента с нужными хинтом. Но это тоже не удобно.

    А вот так можно сделать на jQuery
    Код (PHP):
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <title>лёгкий путь</title>
    5. <meta charset="UTF-8">
    6. <style>
    7. .hint{
    8.     display:none;
    9.     background:#0f0;
    10. }
    11. </style>
    12. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    13. <script>
    14. $(document).ready(function(){
    15.     $('.hrefs a').hover(
    16.         function(){$('span', this).show()},
    17.         function(){$('span', this).hide()}
    18.     );
    19. });
    20. </script>
    21. </head>
    22. <body>
    23. <div class="hrefs">
    24.     <ul>
    25.         <li>[url="http://href1.ru"]подсказка к ссылке 1</span>[/url]</li>
    26.         <li>[url="http://href2.ru"]подсказка к ссылке 2</span>[/url]</li>
    27.         <li>[url="http://href3.ru"]подсказка к ссылке 3</span>[/url]</li>
    28.     </ul>
    29. </div>
    30. </body>
    31. </html>