Задать вопрос
ruchej
@ruchej
Конструктор мебели. Пишу макросы для К3-Мебель

Как определить, что нажата ссылка с определённым свойством?

Добрый день.
Не могу правильно написать код на JS, т.к. пока в нём ноль.
Надо определить, что нажата ссылка со свойством rel = "slide" и вызывать функцию.
В моём коде №1 функция вызывается сразу после загрузки страницы, а не по нажатию.
В №2 вроде правильно работает, но пришлось вызываемую функцию поместить в функцию, которая присваивается вызову. Почему так?
Так же в коде 1, когда передаю refs[i].onclick = slideshow(this); объект this не указывает на ссылку.
HTML
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Тест модального окна</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>

    <div id="gallery">
        <a href="http://fkm-anons.ru/uploads/gallery/image/pre_04_12.jpg" rel="slide">
            <img src="http://fkm-anons.ru/uploads/gallery/image/list_04_12.jpg" alt="">
        </a>
        <a href="http://fkm-anons.ru/uploads/gallery/image/pre_dinamika_15072013.jpg" rel="slide">
            <img src="http://fkm-anons.ru/uploads/gallery/image/list_dinamika_15072013.jpg" alt="">
        </a>
        <a href="http://fkm-anons.ru/uploads/gallery/image/pre_04_4.jpg" rel="slide">
            <img src="http://fkm-anons.ru/uploads/gallery/image/list_04_4.jpg" alt="">
        </a>

    </div>


<button id="myBtn">Модальное окно</button>
<div id="myModal" class="modal">
    <div class="modal-content">
        <span class="close">&times;</span>
        <p>Модальное окно</p>
    </div>
</div>


    <script src="testmodal.js"></script>
</body>
</html>


Код JS №1
var refs=document.getElementsByTagName("a")
for (var i=0, L=refs.length; i<L; i++) {
    refs[i].onclick = slideshow(this); 
}
 
function slideshow(link) {
        alert(link.href) 
        return false;
}

Код JS №2
var refs=document.getElementsByTagName("a")
for (var i=0, L=refs.length; i<L; i++) {
    refs[i].onclick = function() {
        slideshow(this); 
        return false;
    }
}
 
function slideshow(link) {
        alert(link.href) 
        return true;
}
  • Вопрос задан
  • 663 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Stalker_RED
@Stalker_RED
На каждую ссылку свой бработчик
let linkNodes = document.querySelectorAll('a[rel=slide]') // находим все ссылки с rel=slide
let slideLinks = [].slice.call(linkNodes)
slideLinks.forEach(link=>{ 
    link.addEventListener('click', function(evt){ // вешаем на каждую обработчик
    let link = evt.target
    console.log('clicked', link.href)
  })
})


Или один на всех
document.addEventListener('click', function(evt){ // обработчик кликов привязан к document
    if (evt.target.rel == 'slide') { // если у кликнутого элемента есть rel=slide
  	let link = evt.target
    console.log('clicked', link.href)
  }
})


В ваших примерах код onclick = slideshow(this) вызывает функцию slideshow и ее значение уже присваивает.
Если написать onclick = slideshow; то получится то, что вы хотели.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@LiguidCool
Погуглите зачем нужен .on и .bind
И да, поймите в чем разница.

upd
Если не JQuery, то .addEventListener
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы