Не работает скрипт клик по объекту внутри bxslider

100
27 декабря 2020, 03:50

Есть изображение, по клику на которое должно появляться окно alert. Изображение находится внутри слайда bx slider. Но по клику ничего не происходит.

<div class="blog_slide_2">
     <img id="play" src="img/play.png">
      <video id="movie" src="video/kitten.mp4" controls></video>
</div>
<script>
$('#play').click(function(){
    alert ('алё');
});
</script>

Вообще, как полный нуб, пробовала скрипт оборачивать в такие конструкции:

$(document).on('ready', function(){});
$(document).on('load', function(){});
$(window).on('ready', function(){});
$(window).on('load', function(){});

Пробовала делать делегирование события (знаю, бред, ведь контент статический), но так хотя бы это событие появлялось в списке Event Listeners. Но, по-прежнему, не работало. Помогите, пoжалуйста, заставить его работать.

Answer 1

Атрибут id должен быть уникальным. Если Вы используете его несколько раз, событие клика сработает только на первом. Лучше добавьте play, например, в класс или атрибут data

Разметка:

<div>
    <div class="box">
        <img class="play" src="..." />
    </div>
    <div class="box">
        <img class="play" src="..." />
    </div>
</div>

Скрипт:

<script>
    $(function() {
        $(".play").click(function() {
            alert(1);
        });
    });
</script>

В случае, если будете использовать атрибут data:

Разметка будет такой:

<img data-play src="..." />

А скрипт таким:

$("[data-play]").click(function() {
});
Answer 2

Решением оказалось заменить событие click на mousedown, при этом функцию этого клика вложила в функцию слайдера:

$('.slider').bxSlider({
  $('#play').on ( 'mousedown', function(){
    alert ('Клик по play');
  }
});

Потом был интересный момент с pager. Он у меня был стандартный, не кастомный. Там я сделала то же самое, но клик по кнопкам пейджера не работал в мобильной версии. Получалось переключить слайд, но остановить видео, например, не выходило. Заработало после того, как вместо mousedown по пейджеру поставила touchend.

$('.new').on ( 'touchend', function(){
     //alert ('Клик по пейджеру, видео на паузе');
});

Класс $('.new') добавила через опцию Bx-слайдера onSliderLoad:

  onSliderLoad: function(currentIndex){
   $("body > div > div.bx-controls.bx-has-pager > div > div").addClass("new");
  }

Спасибо всем, особенно ВадимЛешкевич, за помощь. Надеюсь, мой ответ кому-то ещё пригодиться. Всё заработало!!!

READ ALSO
Отображение дублированного кода

Отображение дублированного кода

имеется функции загрузки модели

111
Регулярное исключение

Регулярное исключение

Дано: любая строка содержащая любые символы (asdfaslcvbieubcasku)

125
Как сверстать такой график?

Как сверстать такой график?

подскажите пожалуйста каким образом можно сделать такой круг? Требуется сделать такой графикПроблема в том что надо удобно менять значения?...

128
on(&ldquo;mouseover&#39;) и on(&rdquo;mouseout&#39;) jquery

on(“mouseover') и on(”mouseout') jquery

Как сделать так, чтоб при наведении на некоторый текст, он изменялся, а при уходе курсора с него он становился таким, каким был до наведения...

97