Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Переход по ссылке при клике на id блока (https://javascript.ru/forum/css-html/74510-perekhod-po-ssylke-pri-klike-na-id-bloka.html)

artemii 17.07.2018 17:15

Переход по ссылке при клике на id блока
 
Всем доброго дня.
Есть функция

window.onload = function () {

    var a = document.getElementById('idglub1');

    
    a.onclick = function() {
        document.location.href = 'Ссылка'
            }
}


Все работает до того времени, пока я не вставляю еще одну но с другой ссылкой, замена имен переменных не помогает.
Полный профан в JS...

Как сделать так чтобы все работала например при 20 разных id блоков.
Спасибо

Dilettante_Pro 17.07.2018 17:50

artemii,
Можно добавить пример html с разными блоками и пример скрипта с попыткой обработки кликов на разных блоках?

artemii 17.07.2018 17:54

Страничка на которой размещены блоки и скрипт https://vk.cc/8hHO5q
Блоки при клике на которые должны быть переходы - обрамлены рамкой, с анимацией.
Айдишники idglub1 , idglub2 и так далее

Dilettante_Pro 17.07.2018 18:07

artemii,
Просьба была насчет маленького примера html и маленького скрипта, на которых была бы видна проблема, а не целого сайта, на котором непросто найти нужное.
Что-то там не видно таких айдишников

artemii 17.07.2018 18:35

Увы это вп, не могу вычленить кусок хтмл, ничего не будет понятно по нему)
айдишники по поиску бьются, все ок
Скрипт выше - это целый, не кусок

artemii 17.07.2018 18:36

https://zaogss.ru/glub/:213:</header><!-- header -->	<div class="realfactory-page-wrapper" id="realfactory-page-wrapper" ><div class="gdlr-core-page-builder-body"><div class="gdlr-core-pbf-wrapper " ><div class="gdlr-core-pbf-wrapper-content gdlr-core-js "   ><div class="gdlr-core-pbf-wrapper-container clearfix gdlr-core-container" ><div class="gdlr-core-pbf-element" ><div class="gdlr-core-title-item gdlr-core-item-pdb clearfix  gdlr-core-left-align gdlr-core-title-item-caption-top gdlr-core-item-pdlr"  ><span class="gdlr-core-title-item-caption gdlr-core-info-font gdlr-core-skin-caption"  >Выполненные работы</span><div class="gdlr-core-title-item-title-wrap " ><h3 class="gdlr-core-title-item-title gdlr-core-skin-title"  >Глубинное водопонижение</h3></div></div></div><div class="gdlr-core-pbf-element" ><div class="gdlr-core-divider-item gdlr-core-item-pdlr gdlr-core-item-pdb gdlr-core-divider-item-normal"  ><div class="gdlr-core-divider-line gdlr-core-skin-divider" style="border-color: #00517c;" ></div></div></div><div class="gdlr-core-pbf-column gdlr-core-column-20 gdlr-core-column-first"  id="idglub1" ><div class="gdlr-core-pbf-column-content-margin gdlr-core-js  skill_block"   ><div class="gdlr-core-pbf-background-frame" style="margin: 3px 15px 15px 15px;border-width: 3px 3px 3px 3px;border-style: solid;border-color: #d6d6d6;"  ></div><div class="gdlr-core-pbf-column-content clearfix gdlr-core-js "   ><div class="gdlr-core-pbf-element" ><div class="gdlr-core-image-item gdlr-core-item-pdlr gdlr-core-item-pdb  gdlr-core-center-align"  ><div class="gdlr-core-image-item-wrap gdlr-core-media-image  gdlr-core-image-item-style-rectangle" style="border-width: 0px;"  ><a href="/bolshaya-pochtovaya/" target="_self" ><img src="https://zaogss.ru/wp-content/uploads/2018/04/igly.bol_.pocht_.6-800x420.jpg" alt="" width="800" height="420" /><span class="gdlr-core-image-overlay " style="background: rgba(0, 81, 124, 0.6);"  ><i class="gdlr-core-image-overlay-icon fa fa-link gdlr-core-size-22"  ></i></span></a></div></div></div><div class="gdlr-core-pbf-element" ><div class="gdlr-core-title-item gdlr-core-item-pdb clearfix  gdlr-core-center-align gdlr-core-title-item-caption-top gdlr-core-item-pdlr" style="padding-bottom: 20px;"  ><div class="gdlr-core-title-item-title-wrap " ><h3 class="gdlr-core-title-item-title gdlr-core-skin-title" style="font-size: 20px;font-weight: 500;letter-spacing: 0px;text-transform: none;"  ><a href="/bolshaya-pochtovaya/" target="_self" >Большая Почтовая</a></h3></div></div></div><div class="gdlr-core-pbf-element" ><div class="gdlr-core-text-box-item gdlr-core-item-pdlr gdlr-core-item-pdb gdlr-core-center-align"  ><div class="gdlr-core-text-box-item-content" style="font-size: 16px;"  ><p>Объект:  «Многофункциональный жилой комплекс» 1-я очередь, расположенном по адресу: г. Москва, ул. Большая Почтовая, вл.24,30, 34.»</p>

artemii 17.07.2018 18:38

Вот пример 1го блока.
Как быть с 1м - понятно, скрипт работает корректно при 1й ссылке.
Но когда нужно чтобы было больше 2х ссылок - не пашет(

Dilettante_Pro 17.07.2018 18:43

Небольшой макет
<style>
div {width:20px;
       height:20px;
       background:gray;
       border:1px solid black;}
</style>
<div id = "idglub1"></div>
<div id = "idglub2"></div>
<div id = "idglub3"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
 $("div[id*=idglub]").on('click', function(){ 
     alert(this.id);
 });
</script>

j0hnik 17.07.2018 19:19

artemii,
вы блок добавляете, а обработчик один?

artemii 17.07.2018 19:26

Спасибо, но я не понял как сделать так, чтобы при клике на idglub1 был переход на ссылку1, а при клике на idglub2 был переход на ссылку2...

artemii 17.07.2018 21:08

Цитата:

Сообщение от Dilettante_Pro (Сообщение 489966)
Небольшой макет
<style>
div {width:20px;
       height:20px;
       background:gray;
       border:1px solid black;}
</style>
<div id = "idglub1"></div>
<div id = "idglub2"></div>
<div id = "idglub3"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
 $("div[id*=idglub]").on('click', function(){ 
     alert(this.id);
 });
</script>

Можете показать на примере как сделать не алерты а переходы по ссылкам?

j0hnik 17.07.2018 21:25

artemii,
<div class="href">блок1</div>
<div class="href">блок2</div>
<div class="href">блок3</div>
	<script>
var arr = ['https://google.com','https://yandex.ru','http://vk.com'];
document.querySelectorAll('.href').forEach((el,i)=> el.onclick=e=> location = arr[i]);
	</script>

artemii 17.07.2018 22:07

Цитата:

Сообщение от j0hnik (Сообщение 490023)
artemii,
<div class="href">блок1</div>
<div class="href">блок2</div>
<div class="href">блок3</div>
	<script>
var arr = ['https://google.com','https://yandex.ru','http://vk.com'];
document.querySelectorAll('.href').forEach((el,i)=> el.onclick=e=> location = arr[i]);
	</script>

Можете описать?) Я ничего не понял.
В предпросмотре не работает даже ничего...

j0hnik 17.07.2018 22:19

Цитата:

Сообщение от artemii (Сообщение 490034)
Можете описать?) Я ничего не понял.
В предпросмотре не работает даже ничего...

тут не работает из за настроек, локально запустите заработает.

Dilettante_Pro 17.07.2018 22:45

artemii,
А что такое Сылка1, Ссылка2? Откуда их брать?

artemii 18.07.2018 00:05

Цитата:

Сообщение от j0hnik (Сообщение 490023)
artemii,
<div class="href">блок1</div>
<div class="href">блок2</div>
<div class="href">блок3</div>
	<script>
var arr = ['https://google.com','https://yandex.ru','http://vk.com'];
document.querySelectorAll('.href').forEach((el,i)=> el.onclick=e=> location = arr[i]);
	</script>

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490048)
artemii,
А что такое Сылка1, Ссылка2? Откуда их брать?

Любые рандомные ссылки, не суть, я их сам проставлю какие нужны)

artemii 18.07.2018 00:06

Цитата:

Сообщение от j0hnik (Сообщение 490041)
тут не работает из за настроек, локально запустите заработает.

И у вас одинаковые айдишники у блоков... какая ссылка к какому блоку относится?

Dilettante_Pro 18.07.2018 10:30

Ссылки из массива
<style>
div {width:50px;
       height:20px;
       background:gray;
       border:1px solid black;}
</style>
<div id = "idglub1">idglub1</div>
<div id = "idglub2">idglub2</div>
<div id = "idglub3">idglub3</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
var refer = ['Ссылка1','Ссылка2','Ссылка3'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/\D+/g,"") - 1;
     alert(refer[idx]);
    //  document.location.href = refer[idx];
 });
</script>

j0hnik 18.07.2018 10:38

Цитата:

Сообщение от artemii
И у вас одинаковые айдишники у блоков... какая ссылка к какому блоку относится?

у меня нет айдишников, где вы их увидели???
первая к первому вторая ко второму..

artemii 18.07.2018 11:08

Цитата:

Сообщение от j0hnik (Сообщение 490041)
тут не работает из за настроек, локально запустите заработает.

Цитата:

Сообщение от j0hnik (Сообщение 490087)
у меня нет айдишников, где вы их увидели???
первая к первому вторая ко второму..

Ах да, прошу прощения,перепутал класс с айди.

А есть возможность сделать скрипт который именно по айдишникам бы работал?
то есть при клике на айди1 был переход на ссылку 1, на айди2 на ссылку2 и так далее...

Dilettante_Pro 18.07.2018 11:39

Цитата:

Сообщение от artemii
А есть возможность сделать скрипт который именно по айдишникам бы работал?
то есть при клике на айди1 был переход на ссылку 1, на айди2 на ссылку2 и так далее..

Смотрите пост 18

j0hnik 18.07.2018 11:51

<div id="href1">блок1</div>
<div id="href3">блок3</div>
<div id="href2">блок2</div>
<script>
	var obj = {
		href1:'https://google.com',
		href2:'https://yandex.ru',
		href3:'http://vk.com'
	};
	document.querySelectorAll('div[id^="href"]').forEach((el,i)=> el.onclick=e=> location = obj[el.id]);
</script>

artemii 18.07.2018 12:40

Цитата:

Сообщение от j0hnik (Сообщение 490099)
<div id="href1">блок1</div>
<div id="href3">блок3</div>
<div id="href2">блок2</div>
<script>
	var obj = {
		href1:'https://google.com',
		href2:'https://yandex.ru',
		href3:'http://vk.com'
	};
	document.querySelectorAll('div[id^="href"]').forEach((el,i)=> el.onclick=e=> location = obj[el.id]);
</script>

Спасибо, логика понятно, но данный скрипт почему то не работает на WP(

j0hnik 18.07.2018 12:42

artemii,
у меня работает =)

artemii 18.07.2018 12:44

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490086)
Ссылки из массива
<style>
div {width:50px;
       height:20px;
       background:gray;
       border:1px solid black;}
</style>
<div id = "idglub1">idglub1</div>
<div id = "idglub2">idglub2</div>
<div id = "idglub3">idglub3</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
var refer = ['Ссылка1','Ссылка2','Ссылка3'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/\D+/g,"") - 1;
     alert(refer[idx]);
    //  document.location.href = refer[idx];
 });
</script>

Ваш скрипт работает, но почему то ссылки выпадают в таком виде "https://сайт/glub/undefined"

В чем может быть ошибка?

artemii 18.07.2018 12:45

Вот как это сейчас работает, на первых 3х блоках работ
https://vk.cc/8hHO5q

Dilettante_Pro 18.07.2018 14:41

artemii,:cray:
Вы прямо так и вставили?
<script type="text/javascript">
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
ar refer = ['Ссылка1','Ссылка2','Ссылка3'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/\D+/g,"") - 1;
     alert(refer[idx]);
 });</script>

еще и с ошибками - кусок от загрузки jQuery, ar refer

Поздравляю!
Я ведь у вас неоднократно спрашивал насчет ссылок.

И вообще - зачем это нужно?
Там и так все нормально работает по ссылкам, заложенным в блоки.

artemii 18.07.2018 14:48

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490086)
Ссылки из массива
<style>
div {width:50px;
       height:20px;
       background:gray;
       border:1px solid black;}
</style>
<div id = "idglub1">idglub1</div>
<div id = "idglub2">idglub2</div>
<div id = "idglub3">idglub3</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
var refer = ['Ссылка1','Ссылка2','Ссылка3'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/\D+/g,"") - 1;
     alert(refer[idx]);
    //  document.location.href = refer[idx];
 });
</script>

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490144)
artemii,:cray:
Вы прямо так и вставили?
<script type="text/javascript">
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
ar refer = ['Ссылка1','Ссылка2','Ссылка3'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/\D+/g,"") - 1;
     alert(refer[idx]);
 });</script>

еще и с ошибками - кусок от загрузки jQuery, ar refer

Поздравляю!
Я ведь у вас неоднократно спрашивал насчет ссылок.

И вообще - зачем это нужно?
Там и так все нормально работает по ссылкам, заложенным в блоки.

Я конечно же вставил свои ссылки) Но не работает
Нужно для того чтобы кликабельным был ВЕСЬ блок (квадратик этот анимированный, а не только картинка и заголовок)

Подскажите пожалуйста в чем ошибка

Dilettante_Pro 18.07.2018 14:55

Цитата:

Сообщение от artemii
Я конечно же вставил свои ссылки)

Где? Этот скрипт я взял с вашего сайта.
Есть еще куски?

Dilettante_Pro 18.07.2018 14:56

Цитата:

Сообщение от artemii
Нужно для того чтобы кликабельным был ВЕСЬ блок (квадратик этот анимированный, а не только картинка и заголовок)

Для этого достаточно вызвать событие click на вложенной в блок ссылке.

artemii 18.07.2018 14:59

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490150)
Для этого достаточно вызвать событие click на вложенной в блок ссылке.

Как это реализовать?

Dilettante_Pro 18.07.2018 15:30

<style>
div.cont {
        width:60px;
       background:gray;
       border:1px solid black;}
</style>
<div class="cont" id = "idglub1">
   <div>idglub1</div>
   <div>
      <a href="#">Ссылка1</a>
   </div>
</div>
<div class="cont" id = "idglub2">
   <div>idglub2</div>
   <div>
      <a href="#">Ссылка2</a>
   </div>
</div>
<div  class="cont" id = "idglub3">
   <div>idglub3</div>
   <div>
      <a href="#">Ссылка3</a>
   </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>

 $("div[id*=idglub]").on('click', function(){
      $(this).find('a').trigger('click');
 });

 $("a").on('click', function(e){
        e.preventDefault();
        e.stopPropagation();
       alert(this.textContent);
  
  });
</script>


Вам из этого примера нужны только строки 28-30

И уберите все лишнее, что вы еще, мне кажется, где-то вписали.

artemii 18.07.2018 16:52

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490153)
<style>
div.cont {
        width:60px;
       background:gray;
       border:1px solid black;}
</style>
<div class="cont" id = "idglub1">
   <div>idglub1</div>
   <div>
      <a href="#">Ссылка1</a>
   </div>
</div>
<div class="cont" id = "idglub2">
   <div>idglub2</div>
   <div>
      <a href="#">Ссылка2</a>
   </div>
</div>
<div  class="cont" id = "idglub3">
   <div>idglub3</div>
   <div>
      <a href="#">Ссылка3</a>
   </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>

 $("div[id*=idglub]").on('click', function(){
      $(this).find('a').trigger('click');
 });

 $("a").on('click', function(e){
        e.preventDefault();
        e.stopPropagation();
       alert(this.textContent);
  
  });
</script>


Вам из этого примера нужны только строки 28-30

И уберите все лишнее, что вы еще, мне кажется, где-то вписали.

Удалил все лишнее, вставил ваш скрипт (нужные строки) , в результате ничего...

artemii 18.07.2018 16:54

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490144)
artemii,:cray:
Вы прямо так и вставили?
<script type="text/javascript">
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
ar refer = ['Ссылка1','Ссылка2','Ссылка3'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/\D+/g,"") - 1;
     alert(refer[idx]);
 });</script>

еще и с ошибками - кусок от загрузки jQuery, ar refer

Поздравляю!
Я ведь у вас неоднократно спрашивал насчет ссылок.

И вообще - зачем это нужно?
Там и так все нормально работает по ссылкам, заложенным в блоки.

Можете подсказать на что изменить ar refer чтобы все работало?

Dilettante_Pro 18.07.2018 16:55

artemii,
Можно посмотреть результат?
По прежней ссылке осталось все по-старому.

Dilettante_Pro 18.07.2018 17:00

artemii,
Цитата:

Сообщение от artemii
Можете подсказать на что изменить ar refer чтобы все работало?

Этот кусок надо целиком удалить и вставить вместо него строки 28-30 из последнего примера.
Также удалить
var refer = ['https://zaogss.ru/bolshaya-pochtovaya/','https://zaogss.ru/nagatinskaya/','https://zaogss.ru/stahanovskaya/'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/D+/g,"") - 1;
document.location.href = refer[idx];
 });

(крутил этот скрипт на вашем сайте в консоли - почему-то не срабатывает this.id.replace(/D+/g,""), не выделяет цифры, возвращает целиком id)

artemii 18.07.2018 17:15

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490144)
artemii,:cray:
Вы прямо так и вставили?
<script type="text/javascript">
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
ar refer = ['Ссылка1','Ссылка2','Ссылка3'];
 $("div[id*=idglub]").on('click', function(){
     var idx = +this.id.replace(/\D+/g,"") - 1;
     alert(refer[idx]);
 });</script>

еще и с ошибками - кусок от загрузки jQuery, ar refer

Поздравляю!
Я ведь у вас неоднократно спрашивал насчет ссылок.

И вообще - зачем это нужно?
Там и так все нормально работает по ссылкам, заложенным в блоки.

Цитата:

Сообщение от Dilettante_Pro (Сообщение 490163)
artemii,
Можно посмотреть результат?
По прежней ссылке осталось все по-старому.

https://vk.cc/8hUsXX.
Вот тут теперь
Может быть проблема в самом ВП?

artemii 18.07.2018 17:16

Может быть есть другой способ сделать кликабельным весь блок?
При условии что это ВП и нет доступа к голому хтмл

Dilettante_Pro 18.07.2018 17:19

artemii,
Насчет предыдущей версии - вы неправильно ввели this.id.replace(/D+/g,"")
Нужно this.id.replace(/\D+/g,"")

И чтобы не было лишнего мусора
Новый вариант сейчас посмотрю

artemii 18.07.2018 17:25

ВП почему то убирает слэш вот тут (/D+/g,""), хотя все вставляю правильно


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