Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2019, 16:50
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Как повесить событие на кнопку?
Добрый день. Использую jQuery плагин для фотогалереи: http://lokeshdhakar.com/projects/lightbox2/

Скрипт создаёт вот такую разметку:
<div id="lightbox" class="lightbox" style="display: none; top: 1063px; left: 0px;">
	<div class="lb-outerContainer" style="width: 551px; height: 344px;">
		<div class="lb-container">
			<div class="lb-dataContainer" style="display: block; width: 591px;">
				<div class="lb-data">
					<div class="lb-details"><span class="lb-caption" style="display: inline;">Логан старый</span><span class="lb-number">Image 3 of 5</span></div>
					<div class="lb-closeContainer">
						<a class="lb-close"></a>
					</div>
				</div>
			</div><img class="lb-image" src="/Логан-старый.jpg" data-id="120" style="display: block; width: 755px; height: 471px;">
			<div class="lb-nav" style="display: block;">
				<a class="lb-prev" href="" style="display: block;"></a>
				<a class="lb-next" href="" style="display: block;"></a>
			</div>
			<div class="lb-loader" style="display: none; opacity: 0.444301;">
				<div class="lb-loader__1"></div>
				<div class="lb-loader__2"></div>
				<div class="lb-loader__3"></div>
				<div class="lb-loader__4"></div>
				<div class="lb-loader__5"></div>
			</div>
		</div>
		<div class="lb-comments">120</div>
	</div>
</div>


Пытаюсь на кнопки вперёд назад повесить событие
$(document).on('click','.lb-prev', function(e) {

но ни в какую не работает.

Вот что я делаю:
http://jsfiddle.net/s5v4pLz9/
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2019, 16:53
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Помогите пожалуйста разобраться
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2019, 17:20
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

document.addEventListener("click", function(event) {
	if(event.target.classList.contains("lb-next")) {
		alert("⏩");
	}

	if(event.target.classList.contains("lb-prev")) {
		alert("⏪");
	}
}, true);
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2019, 17:25
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Спасибо, работает
Ответить с цитированием
  #5 (permalink)  
Старый 26.01.2019, 17:44
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Можно ещё один совет?
Каким образом по клику на "вперёд-назад", например, обратиться к элементу, или получить атрибут элемента img с классом lb-image?
Ответить с цитированием
  #6 (permalink)  
Старый 26.01.2019, 18:11
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Я не понял, что вы хотите, но вот теперь оно ещё говорит адрес картинки которая загрузилась...
document.addEventListener("click", function(event) {
	var target = event.target;
	
	if(target.classList.contains("lb-next")) {
		alert("⏩");
	}

	if(target.classList.contains("lb-prev")) {
		alert("⏪");
	}
	
	if(target.matches(".lb-prev, .lb-next")) {
		var image = target.closest(".lightbox").querySelector("img.lb-image");
		
		image.onload = function() {
			image.onload = null;
			alert(image.src);
		};
	}
}, true);
Ответить с цитированием
  #7 (permalink)  
Старый 27.01.2019, 20:54
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Спасибо большое за хорошее решение. Интересно, почему не сработал?
$(document).on('click','.lb-prev', function(e) {


И вообще, возможно ли сделать на jQuery? А то, внутри не работают ни какие jQuery методы
И кстати говоря, closest не поддерживается многими браузерами

Последний раз редактировалось Янковиц, 27.01.2019 в 21:32.
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2019, 01:52
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Янковиц
closest не поддерживается многими браузерами
Метод closest имеет очень хорошую поддержку. https://caniuse.com/#search=closest Если вам нужна поддержка в старых браузерах вы можете использовать polyfill service, который выдаёт полифилы когда браузеру это нужно!

Сообщение от Янковиц
А то, внутри не работают ни какие jQuery методы
Функция $ или jQuery это обычная JavaScript функция, вы можете вызывать её в любом месте вашего скрипта. (Проверьте, может она не импортирована/подключена)

Сообщение от Янковиц
возможно ли сделать на jQuery?
Нет, jQuery не поддерживает «погружение» событии. Если вы хотите добавить обработчик события, который перехватывает событие, вы можете сделать это используя явно метод addEventListener, с третьим параметром true.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как повесить событие на DIV внутри подгружаемой PHP страницы. Viktorian Events/DOM/Window 4 20.01.2018 22:06
как установить событие на кнопку от яндекс деньги Сергей888 Общие вопросы Javascript 1 08.08.2017 17:47
Повесить на кнопку событие с ajax Янковиц Элементы интерфейса 8 13.04.2017 14:23
Как повесить обработчик на событие load? skruks Events/DOM/Window 9 01.03.2014 00:35
JS Создали div, как при создании повесить событие? фонарик Общие вопросы Javascript 5 02.03.2013 09:33