Задать вопрос
@Valery23

Как правильно заменить функционал с document.getElementById на class?

Есть кнопка, при нажатии на которую меня должно редиректить на другую страницу:
<button type="submit" name="add-to-cart" value="<?php echo esc_attr($product->get_id()); ?>" class="single_add_to_cart_button button alt" id="buy_now_button">
<?php echo esc_html('Buy Now'); ?>
</button>
<input type="hidden" name="is_buy_now" id="is_buy_now" value="0" />

Вот сам скрипт, который работает через id, но таких кнопок на странице много, и так как это id, работает только самая первая, остальные не редиректят. Скажите пожалуйста, что нужно изменить в скрипте?
<script>
document.getElementById('buy_now_button').onclick = function() {
    setTimeout(function() {
        window.location = 'http://site.com/checkout';
    }, 500);
};
</script>
  • Вопрос задан
  • 649 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Есть функция getElementsByClassName().
Поэтому так
<script>
var all = document.getElementsByClassName('main-menu__link');
for (let i=0; i<all.length; i++) {
	all[i].onclick = function() {
		setTimeout(function() {
			window.location = 'http://site.com/checkout';
		}, 500);
	}
};
</script>
Или так
<script>
[...document.getElementsByClassName('main-menu__link')].forEach(e=>e.onclick = function() {
	setTimeout(function() {
		window.location = 'http://site.com/checkout';
	}, 500);
});
</script>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
const handler = function() {
    setTimeout(function() {
        window.location = 'http://site.com/checkout';
    }, 500);
}

document.querySelectorAll(".someClass").forEach(element => element.onclick = handler )
Ответ написан
joeberetta
@joeberetta Куратор тега JavaScript
Читай: https://epdf.pub/google-for-dummies.html
buttons = document.getElementsByClassName('someClass');
for(let i = 0; i <buttons.length; i++)
{
  //Здесь будет функци по всем элементам класса
}

P.s. По совместимости и скорости быстрее чем querySelector ы
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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