Использовать stopPropagation в событии click
у меня есть якорь внутри div с классом "элемент".
<div class="element logout">
<div class="subTop">
<a href="home.jsp" onclick="return confirm('Do you want to logout?');">Log Out</a>
</div>
</div>
Я использую следующий код для обработки выхода.
jQuery(".element").click(function(e){
var tmpHref=jQuery(this).not('.logout').find(".subTop>a").attr('href');
if(tmpHref!=undefined&&tmpHref!=""&&tmpHref!=null)
{
window.location.href=tmpHref;
}
else
{
jQuery(this).find(".subTop>a").click();
}
});
но моя проблема заключается в том, что событие подтверждения запускается снова и снова. Я думаю, это из-за равномерного размножения. После моих исследований я узнаю, что могу использовать e.stopPropagation()
С этой пост. Но я не могу понять, как это можно использовать здесь.
редактировать Сообщение " вы хотите выйти из системы? в поле подтверждение динамически из базы данных, поэтому я не могу жесткий код в код.
4 ответов
это основано на нескольких предположениях о том, что я думаю, что вы хотите. Из комментариев и вопроса я понимаю, что пользователь должен быть отправлен домой.jsp', если у внешнего сопля div doe есть класс выхода из системы или выход из системы.jsp ' если это так. Если это правильно, вы можете cahnge html в
<div class="element logout">
<div class="subTop">
<a href="home.jsp" data-confirmmsg="Do you want to logout?" >Log Out</a>
</div>
</div>
и JavaScript для
jQuery(".subTop>a").click(function(e){
e.preventDefault();
});
jQuery(".element").click(function(e){
var self = jQuery(this),
isLogout = self.hasClass('logout')
anchor = self.find(".subTop>a")
href = isLogout ? "logout.jsp" : anchor.attr('href');
if(!isLogout || (isLogout && confirm(anchor.data('confirmmsg'))))
{
window.location.href=href;
}
});
первая часть Javascript просто отключает a
- tag как ссылка. Ничего не происходит, кроме распространения события на внешние элементы (в случае, если щелчок был на самом деле по ссылке, мы все равно не позволим `div-тегу обрабатывать его). Вторая часть JavaScript начинается с проверки наличия или отсутствия класса выхода и устанавливает href соответственно. наконец, если пользователь отправляется в ' logout.jsp ' будет показано поле подтверждения и проверено возвращаемое значение.
попробуйте это:
HTML-код:
<div class="element logout">
<div class="subTop">
<a href="home.jsp" class="testa" >Log Out</a>
</div>
</div>
jQuery:
jQuery(".element").click(function(e){
e.preventDefault();
if( confirm('Do you want to logout?'))
{
//console.log(jQuery(this).parents('.element'));return;
if(jQuery(this).hasClass('logout'))
{
window.location.href='logout.jsp';
}
else
{
window.location.href='home.jsp';
}
}
});
Тест Скрипка:http://jsfiddle.net/e52QN/1/
попробовать
onclick="return confirm('Do you want to logout?');window.event.cancelBubble = true;"
или
onclick="javascript:event.stopPropagation();return confirm('Do you want to logout?');"
вы можете использовать:
$('.subTop a').on('click', function (e) {
e.stopPropagation();
});
Я согласен с @ink.робот, хотя, ваш код должен быть структурирован лучше, чтобы избежать этой ситуации.