Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Снова панелька. (https://javascript.ru/forum/misc/1709-snova-panelka.html)

SunYang 05.09.2008 19:18

Снова панелька.
 
Столкнулся я такой бедой. Так вот по поводу этой зловещей таблички, при наведении мыши на которую, в одну из ячеек таблицы записывается текст из переменной, а когда мы удираем мышь из области таблицы, туда записывается пустая строка. Так вот, если в тексте, который мы интегрируем (методом innerHTML) в таблицу безо всяких тэгов, то табличка пропадает только после того, как мы выйдем из области таблицы, НО если мы записали туда текст ссылками или оформленный стилем, да и вообще как только встречается какой нито тэг, то табличка исчезает сразу же по паведении на ссылку или "стильный" текст. Как от этого избавиться. Почему так дико воспринимаются теги?
Вот собстн. код:
<script>
str_1 = '<b>Рейтинг Медведева вырос. Лидеры ОДКБ приняли декларацию о событиях на Кавказе. В России запретят продажу 92-го бензина.Райс: международная изоляция России растёт. Против России в Европе ведется информационная война. В Россию придет премиум-марка</b>'

function move(idelem, wrstr) {
argStr = move.arguments
strWr = argStr[1]
var xid = idelem.id;
var axid = xid.split("")
var numid = axid[3]
var newid = "wr_"+numid
var wrtd = document.getElementById(newid)
wrtd.innerHTML = strWr
//event.returnValue = false
}

</script>
 
<div style="position:absolute; left:393px; top:104px;" onMouseOver="move(this, str_1)" id="mv_1" onMouseOut="move(this, '')">
<table width="240" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><img src="images/panel_top.gif" width="240" height="12"></td>
  </tr>
  <tr>
    <td align="center" class="onpanel" width="240"><p class="text_1">Текст</p></td>
  </tr>
    <tr>
    <td align="center" class="onpanel" id="wr_1"></td>
  </tr>
  <tr>
    <td><img src="images/panel_but.gif" width="240" height="12"></td>
  </tr>
</table>
</div>

ZoNT 05.09.2008 20:43

<html>
<head>

<body class="page-body">

<script>
str_1 = '<b>Рейтинг Медведева вырос. Лидеры ОДКБ приняли декларацию о событиях на Кавказе. В России запретят продажу 92-го бензина.Райс: международная изоляция России растёт. Против России в Европе ведется информационная война. В Россию придет премиум-марка</b>'
 
function move(idelem, wrstr) {
	var newid = idelem.id.replace(/\D*(\d*)\D*/,"wr_$1");
	if (wrstr) {
		clearTimeout(this.timer);
		document.getElementById(newid).innerHTML = wrstr;
	}
	else {
		this.timer = setTimeout('document.getElementById("'+newid+'").innerHTML = "'+wrstr+'";',100);
	}
}
 
</script>
 
<div style="position:absolute; left:393px; top:104px;" onMouseOver="move(this,str_1)" id="mv_1" onMouseOut="move(this, '')">
<table width="240" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><img src="images/panel_top.gif" width="240" height="12"></td>
  </tr>
  <tr>
    <td align="center" class="onpanel" width="240"><p class="text_1">Текст</p></td>
  </tr>
    <tr>
    <td align="center" class="onpanel" id="wr_1"></td>
  </tr>
  <tr>
    <td><img src="images/panel_but.gif" width="240" height="12"></td>
  </tr>
</table>
</div>


</html>

SunYang 06.09.2008 20:39

var newid = idelem.id.replace(/\D*(\d*)\D*/,"wr_$1"); - мне немного непонятен этот синтаксис. Что делает это выражение?
Спасибо.

ZoNT 06.09.2008 22:52

replace заменяет первое выражение на второе
первое выражение (регулярка): /\D*(\d*)\D*/ - почитай про регулярные выражения. Я не лектор...
второе выражение (строка): "wr_$1", где $1 - выражение, соответствующее из регулярке, заключенной в скобки (вернее первый член массива, если их несколько).

Короче, я объясняю слишком запутанно, так как пора спать...
Почитай про регулярки и про формат replace.

SunYang 09.09.2008 18:38

А чето ссылки в этой выпадающей менюшки не работают. Подскажите как сделать?

ZoNT 09.09.2008 19:01

я телепат? код пожалуйста....

SunYang 10.09.2008 00:21

<html>
<head>
 
<body class="page-body">
 
<script>
str_1 = '<p>Лидеры ОДКБ приняли декларацию о событиях на Кавказе. В России запретят продажу 92-го бензина.Райс: международная изоляция России растёт. Примерный текст.</p><a href="url">Подробнее...</a>'
 
function move(idelem, wrstr) {
    var newid = idelem.id.replace(/\D*(\d*)\D*/,"wr_$1");
    if (wrstr) {
        clearTimeout(this.timer);
        document.getElementById(newid).innerHTML = wrstr;
    }
    else {
        this.timer = setTimeout('document.getElementById("'+newid+'").innerHTML = "'+wrstr+'";',100);
    }
}
 
</script>
 
<div style="position:absolute; left:393px; top:104px;" onMouseOver="move(this,str_1)" id="mv_1" onMouseOut="move(this, '')">
<table width="240" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><img src="http://javascript.ru/forum/images/panel_top.gif" width="240" height="12"></td>
  </tr>
  <tr>
    <td align="center" class="onpanel" width="240"><p class="text_1">Текст</p></td>
  </tr>
    <tr>
    <td align="center" class="onpanel" id="wr_1"></td>
  </tr>
  <tr>
    <td><img src="http://javascript.ru/forum/images/panel_but.gif" width="240" height="12"></td>
  </tr>
</table>
</div>
 
 
</html>


...вот здесь. В строковой переменной str_1 содержится ссылка (<a href="url">Подробнее...</a>). Так вот после того, как панелька с текстом вылезет, на ссылку, прописавшуюся туды перейти нельзя, а хочется))
Спасибо.

ZoNT 10.09.2008 08:58

всё очень просто: при клике на ссылку происходит маусаут+маусовер на диве и перерисовка содержимого (то есть удаление бывшей ссылки + отрисовка новой такой же). Вот перехода и не происходит.

Вешаем проверку на нажатие ссылки и запрещаем в этом случае перерисовку:
ss = false;
str_1 = '<a href="http://www.yandex.ru/" onmousedown="ss=true">343534</a>Рейтинг Медведева вырос. Лидеры ОДКБ приняли декларацию о событиях на Кавказе. В России запретят продажу 92-го бензина.Райс: международная изоляция России растёт. Против России в Европе ведется информационная война. В Россию придет премиум-марка';
 
function move(idelem, wrstr) {
	if (ss) return;
	var newid = idelem.id.replace(/\D*(\d*)\D*/,"wr_$1");
	if (wrstr) {
		clearTimeout(this.timer);
		document.getElementById(newid).innerHTML = wrstr;
	}
	else {
		this.timer = setTimeout('document.getElementById("'+newid+'").innerHTML = "'+wrstr+'";',100);
	}
}

SunYang 11.09.2008 13:15

Спасибо огромное!!!


Часовой пояс GMT +3, время: 19:06.