ligisayan: У меня есть несколько предположений. Первое состоит в том, что вы указали в примере селектор, который не указывает на нужный вам элемент. Посмотрите скриншот take.ms/f6R6w и подставьте селектор, который будет указывать на нужный элемент, убедитесь что он присуствует на странице сразу, а не подгружается скриптами.
ligisayan: нет, это работать не будет. потому что тут вы почти все напутали.
$('document').on('ready', function(){
if (!$(".fixed-bottom .cart_list li").hasClass("empty")) {
// этот блок будет выполнен после загрузки DOM если у элемент .fixed-bottom .cart_list li есть на странице и У НЕГО НЕТ КЛАССА empty
$('#foot-carousel').data('owlCarousel').removeItem($(this));
$(".fixed-bottom").show();
}
});
1. Чтобы обработчик сработал на перезагруженной странице его нужно вешать не на клик, а $('document').on('ready', cb).
2. Вам решать использовать preventDefault или нет. Он решает одну конкретную задачу — не допускает выполнения стандартного поведения определенных элементов (ссылки, кнопки, инпут-сабмит и подобные). Срабатывает в любом случае, если выполняется дело доходит до его исполнения. Если вам кажется что он не сработал, значит колбек, которые его содержит не был выполнен вообще.
ligisayan: тут нужно проговорить фундаментальные моменты, которые вы кажется упускаете.
1. Если происходит перезагрузка страницы по клику на ссылку, коей и является элемент .remove-item, то этот все что бы вы дальше не написали не сработает, потому что на рефрешнутой странице никто не сделал клика, на который вы расчитываете. Он был сделан на старой странице, которой уже нет.
2. Использование e.preventDefault() позволяет избежать перезагрузки. В этом случае не нужно открывать меню, оно вообще не закроется. Но разумеет ТОВАР НЕ БУДЕТ УДАЛЕН сам собой. О его удалении придется позаботиться вам. Нужно будет сделать запрос к серверу, который удалит товар из корзины пользователя и нужно будет удалить сниппет элемента со страницы. Повторюсь, магии не произойдет и само не удалиться.
ligisayan: Вообще, ЭТО НЕВОЗМОЖНО. Но раз это происходит, то у меня есть следующая теория. Во-первых, если элементы, на которые вы добавлили обработчик событий появляются на странице динамически, то есть в результате работы других скриптов, то ваш обработчик на них не сработает. В таких случаях нужно использовать делегирование $('родитель-нужных-элементов-который-точно-есть-на-странице-с-самог-начала').on('click', '.remove-item', function(e) { ...далее по списку... }); Без этого ваш обработчик вообще никогда не запускается, чтобы мы внутри него не прописали.
1. removeItem() - не смог найти такой метод в документации jQuery
2. .data('name') - возвращает именованное значение, привязанное к определенному элементу DOM, а не объект jquery через который можно манипулировать связанным элементом DOM
Ага, он точно также как и все остальные языка станет в webassembly замечательно компилироваться. И сделают это сильно раньше, чем для «востребованных back-end языков» :)
Написано только что
Роман: я не специально, просто последние несколько дней подробно читаю тостер и несколько огорчен тем, насколько здесь много «ответов» в которых кроме наездов ничего нет. На stackexchange.com совсем иная атмосфера. Решил не стоять в стороне, когда такой хороший ответ пропадает :)
Вы написали замечательный ответ, но его можно сделать еще лучше, сделав самую малость. Нужно убрать самое первое предложение. Из ответ исчезнет наезд и упрек, его будет психологически проще воспринять. Это пойдет на пользу сообществу.