#javascript #jquery #twitter-bootstrap
#javascript #jquery #twitter-bootstrap
Вопрос:
У меня есть кнопка «Добавить в корзину» на моем веб-сайте электронной коммерции на основе Bootstrap 4. Я хочу добавить модальный триггер к кнопке «Добавить в корзину» (для отображения инструкции), и все в порядке, но если я попытаюсь добавить модальный триггер непосредственно внутри кнопки:
<a role="button" class="btn btn-warning" id="buynow" href="/?add-to-cart=51" data-toggle="modal" data-target="#modal-1">Purchase</a>
#modal-1
Отображается, но товар не добавляется в корзину (функция href не работает)
И когда я пытаюсь отобразить модальный без добавления data-toggle="modal" data-target="#modal-1"
атрибутов следующим образом:
$('#buynow').click(function(){
$('#modal-1').modal('show')
});
Модальное окно появляется на пару секунд, но затем следует ссылка на страницу корзины из-за href=/?add-to-cart=51
перенаправления.
Что правильно делать, если я хочу, чтобы товар был добавлен в корзину (благодаря триггеру href), но модальное окно все еще появляется, и при отображении модального не происходит перенаправления?
Комментарии:
1. добавьте
return false
в событие щелчка (или используйте api.jquery.com/event.stoppropagation ) затем создайте сообщение ajax на основе вашего href2. Спасибо! извините, где именно я должен это добавить?
Ответ №1:
Другой подход заключается в использовании атрибута данных, например
<a role="button" class="btn btn-warning" id="add-to-cart" data-url="/?add-to-cart=51" href="#modal-1" data-toggle="modal" data-target="#modal-1">Purchase</a>
и ваш модальный должен выглядеть так
<div class="modal fade" id="modal-1" tabindex="-1" role="dialog" aria-labelledby="modal-1"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
...whatever here. maybe a loading image?
</div>
</div>
</div>
</div>
и затем вызвать URL-адрес
$('#modal-1').on('show.bs.modal', function(e) {
var button = $(e.relatedTarget);
var modal = $(this);
modal.find('.modal-body').load(button.data("url"));
});
Обратите внимание, что я просто загружаю содержимое в модальном load(button.data("url")
формате, вы можете манипулировать атрибутом данных любым удобным для вас способом, например, возможно, вы можете просто присвоить атрибуту данных идентификатор продукта data-id="51"
, а затем, в 'show.bs.modal'
случае, если вы можете вызвать Ajax-запрос для выполнения с ним определенного действия.
Ответ №2:
Вы можете добавить скрытую ссылку
<div class="add-to-cart-btn">
<a role="button" class="btn btn-warning" id="buynow" data-toggle="modal" data-target="#modal-1">Purchase</a>
<a role="button" class="d-none add-to-cart" href="/?add-to-cart=51" ></a>
</div>
$('#buynow').click(function(){
$('#modal-1').modal('show')
$(this).closest('.add-to-cart-btn').find('.add-to-cart').trigger("click");
});
Комментарии:
1. Спасибо. К сожалению, это не помогло 🙁
2. Я имею в виду модальные дисплеи, но продукт не добавлен 🙁
3. Я думаю, потому, что у вас есть несколько кнопок добавления в корзину с одинаковым идентификатором, попробуйте изменить идентификатор, добавив индекс