Обновление
И есть ваша проблема - вам делать нужно щелкнуть обработчики событий для некоторых a
элементов.В этом случае порядок, в котором вы прикрепляете обработчики, имеет значение, так как они будут запущены в этом порядке.
Вот рабочая скрипка , которая показывает желаемое поведение.
Это должен быть ваш код:
$(document).ready(function(){
$('#tabs div.tab').hide();
$('#tabs div.tab:first').show();
$('#tabs ul li:first').addClass('active');
$("div.subtab_left li.notebook a").click(function(e) {
e.stopImmediatePropagation();
alert("asdasdad");
return false;
});
$('#tabs ul li a').click(function(){
alert("Handling link click");
$('#tabs ul li').removeClass('active');
$(this).parent().addClass('active');
var currentTab = $(this).attr('href');
$('#tabs div.tab').hide();
$(currentTab).show();
return false;
});
});
Обратите внимание, что порядок подключения обработчиков был изменен, и e.stopImmediatePropagation()
используется для остановки запуска другого обработчика щелчков, в то время как return false
используется для остановкистандартное поведение перехода по ссылке (а также прекращение всплытия события. Вы можете обнаружить, что вам нужно использовать только e.stopPropagation
).
Поэкспериментируйте с этим, если вы удалите e.stopImmediatePropagation()
вы обнаружите, что оповещение обработчика второго клика сработает после первого оповещения.Удаление return false
не повлияет на это поведение, но приведет к тому, что браузер будет переходить по ссылкам.
Примечание
Лучшим исправлением может быть то, чтоселекторы возвращают совершенно разные наборы элементов, поэтому перекрытия нет, но это не всегда возможно, и в этом случае решение, описанное выше, может быть одним из способов рассмотрения.
Iне понимаю, почему ваш первый фрагмент кода не будет работать.Какое действие по умолчанию вы видите, что хотите остановить?
Если вы подключили к ссылке другие обработчики событий, вам следует рассмотреть event.stopPropagation()
и event.stopImmediatePropagation()
.Обратите внимание, что return false
эквивалентно вызову event.preventDefault
и event.stopPropagation()
ref
В вашемвторой фрагмент кода, e
не определен.Таким образом, ошибка будет выдана в e.preventDefault()
, и следующие строки никогда не будут выполнены.Другими словами
$("div.subtab_left li.notebook a").click(function() {
e.preventDefault();
alert("asdasdad");
return false;
});
должно быть
//note the e declared in the function parameters now
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
alert("asdasdad");
return false;
});
Вот рабочий пример , показывающий, что этот код действительно работает и что return false
на самом деле не требуется, если вы хотите остановить только следующую ссылку.