Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с задачкой, Открыть URL без перезагрузки страницы 
:(
    Опции темы
izOne
  Дата 18.9.2004, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 22.8.2003
Где: Украина, Киев

Репутация: нет
Всего: 4



Хочу сделать ссылку типа "сообщить администрации". Стоят такие цели:
1. Ссылка не должна попасть к поисковм ботам
2. после клика по ней страница не должна перезагружаться
3. после клика ссылка должна исчезать

С JS я практически не знаком поэтому прошу у вас помощи. Для себя представляю это следующим образом:
...
<script language="javascript">
function brokenlink($id, $message){
openlink(?)("http://www.site.ru/links/" + "brokenlink.php" + "?id=" + $id);
hide(?) document.a.brokenlink;
message($message); // это сообщение с кнопкой OK
return false;
}
</script>

<a href="#" id="brokenlink" onClick="javascript:brokenlink("111", "Сообщение отправлено администрации");" class="button">Сообщить о
нерабочей ссылке</a>
...
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
Aliance
Дата 18.9.2004, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(izOne @ 18.9.2004, 17:33)
3. после клика ссылка должна исчезать


Код

function toggleLink(evt) {
  evt = (evt) ? evt : event;
  var target = (evt.target) ? evt.target : evt.srcElement;
  var link = document.GetElementById("link");
  if (target.id == "link") {
     link.style.display = "block";
  } else {
     link.style.display = "none";
  }
}
...
<span id="link"><a href="http://some_link.ru/" onclick="toggleLink();"></span>


Цитата(izOne @ 18.9.2004, 17:33)
1. Ссылка не должна попасть к поисковм ботам

Хм, если на страницы, на которую ведет ссылка не стоит мета теги, то и не должна она попасть туда. Можно еще и исключить ее попадания в историю браузера.
Тогда функцию toggleLink() нужно переписать так:
Код

function toggleLink(evt) {
  evt = (evt) ? evt : event;
  var target = (evt.target) ? evt.target : evt.srcElement;
  var link = document.GetElementById("link");
  if (target.id == "link") {
     link.style.display = "block";
     location.replace("http://some_link.ru/");
  } else {
     link.style.display = "none";
  }
}


Цитата(izOne @ 18.9.2004, 17:33)
2. после клика по ней страница не должна перезагружаться

Код выше - предотвратит проблемы, которые ты хотел обоити. Если все же нужно открытие страницы без ее перезагружения, используй 100% фрейм или php

Это сообщение отредактировал(а) Aliance - 18.9.2004, 18:11
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 18.9.2004, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(izOne @ 18.9.2004, 16:33)
2. после клика по ней страница не должна перезагружаться

Перезагружай нульфрейм или загрузи картинку:
Код
img = new Image();
img.setAttribute("src","http://www.site.ru/links/brokenlink.php?id=" + id);



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
izOne
Дата 18.9.2004, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 22.8.2003
Где: Украина, Киев

Репутация: нет
Всего: 4



Код
<html>
<head>
<title>Тестовая страница</title>
</head>
<body>
<script language="javascript">
function notify(elementId, uid, message){
 var element = document.GetElementById(elementId)
 element.style.display = "none";
 img = new Image();
 img.setAttribute("src", "http://www.site.ru/links/" + elementId + ".php?uid=" + uid);
}
</script>
<span id="brokenlink"><a href="#" onClick="notify('brokenlink', '111', 'Сообщение отправлено администрации'); return false;" class="button">Сообщить о нерабочей ссылке</a></span>
<span id="newversion"><a href="#" onClick="notify('newversion', '111', 'Сообщение отправлено администрации'); return false;" class="button">Сообщить о новой версии</a></span>
</body>
</html>


Не работаетsad.gif В чем тут дело? И как вывести диалоговое окно с кнопкой "OK".
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
Aliance
Дата 18.9.2004, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Ты работаешь с событием!!!
Передай в функцию (аргумент) объект события (evt) и опиши его.
PM MAIL WWW ICQ Skype   Вверх
izOne
Дата 18.9.2004, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 22.8.2003
Где: Украина, Киев

Репутация: нет
Всего: 4



Вот так не работает:
Код
<html>
<head>
<title>Тестовая страница</title>
</head>
<body>

<script language="JavaScript">
<!--
function notify(elementId, uid, message){
   evt = (evt) ? evt : event;
   var target = (evt.target) ? evt.target : evt.srcElement;
   var link = document.GetElementById(elementId);
   if (target.id == elementId) {
       link.style.display = "block";
       location.replace("http://some_link.ru/");
   }else{
       link.style.display = "none";
   }

 img = new Image();
 img.setAttribute("src", "http://www.xxx.kiev.ua/news/" + elementId + ".php?uid=" + uid);
 alert(message);
}
-->
</script>
<span id="brokenlink"><a href="#" onClick="notify('brokenlink', '111', 'Сообщение отправлено администрации'); return false;" class="button">Сообщить о нерабочей ссылке</a></span>
<span id="newversion"><a href="#" onClick="notify('newversion', '111', 'Сообщение отправлено администрации'); return false;" class="button">Сообщить о новой версии</a></span>
</body>
</html>


а вот так работает, но только под IE:

Код
<html>
<head>
<title>Тестовая страница</title>
</head>
<body>
<script language="JavaScript">
<!--
function notify(elementId, uid, message){
 ie = (document.all)? true : false;
 dom = (document.getElementById && !ie)? true : false;
 if(dom){
   document.GetElementById(elementId).style.display = "none";
 }else if(ie){
   document.all[elementId].style.display = "none";
 }
 img = new Image();
 img.setAttribute("src", "http://www.xxx.kiev.ua/news/" + elementId + ".php?uid=" + uid);
 alert(message);
}
-->
</script>
<span id="brokenlink"><a href="#" onClick="notify('brokenlink', '111', 'Сообщение отправлено администрации'); return false;" class="button">Сообщить о нерабочей ссылке</a></span>
<span id="newversion"><a href="#" onClick="notify('newversion', '111', 'Сообщение отправлено администрации'); return false;" class="button">Сообщить о новой версии</a></span>
</body>
</html>


Можно указать на ошибку в №1. И еще... я JS знаю очень плохо, почти не знаю... так что можно про передачу события поподробнее... Лучше, конечно, чтобы был рабочий вариант как для IE, так и для Firefox(Gecko)!

Это сообщение отредактировал(а) izOne - 18.9.2004, 21:49
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
Aliance
  Дата 18.9.2004, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



function notify(elementId, uid, message, evt)
...
//совмещаем и IE и W3C DOM
evt = (evt) ? evt : ((window.event) : event ? null )
...
//неправельно
var target = (evt.target) ? evt.target : evt.srcElement;
//правельно
var target = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null )
...
onclick="notify('brokenlink', '111', 'Сообщение отправлено администрации', event); return false;"

Цитата(izOne @ 18.9.2004, 21:48)
можно про передачу события поподробнее

скоро выйдет FAQ, там про события "разжёвано" все подробнейшим образом!
Добавлено @ 22:02
И вообще, вот функция (совместимая), которая тебе поможет:

Код

function myFunction(evt) {
   evt = (evt) ? evt : ((window.event) ? event : null);
   if (evt) {
      var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
      if (elem) {
          // тут выполняем любые операции над элементом
      }
   }
}

/* ***************************************************
Если твой элемент - контейнер, используй следующую функцию
*************************************************** */
function myFunction(evt) {
   evt = (evt) ? evt : ((window.event) ? event : null);
   if (evt) {
      var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
      if (elem.nodeType == 3) {
          elem = elem.parentNode;
      }
      if (elem ) {
          // тут выполняем любые операции над элементом
      }
   }
}



Это сообщение отредактировал(а) Aliance - 18.9.2004, 22:06
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.