2012-05-08 8 views
1

hi У меня есть навигационное меню, которое скрывается со стороны экрана и может быть переключено, к сожалению, оно не позволит мне щелкнуть по ссылкам на якорь внутри (он просто переключается, вместо этого есть что-то, что я могу сделать для переопределять предотвратить дефолт и получить теги анкерную работают?JQuery toggle override preventdefault

var one = {queue:true, duration:1250, easing: 'easeInOutExpo'}; 
var two = {queue:true, duration:1500, easing: 'easeInOutExpo'}; 

$('nav').toggle(
function() { showMenu() }, 
function() { hideMenu() }); 

$(window).bind('load', function() { 
setTimeout ('hideMenu()', 1000); 
}); 

function hideMenu() 
{ 
$('nav').animate({ left: '-=270' }, one); 
$('#container').animate({ left: '-=270' }, two); 
} 
function showMenu() 
{ 
$('nav').animate({ left: '+=270' }, one); 
$('#container').animate({ left: '+=270' }, two); 
} 

ответ

1

Если предположить, что ссылки внутри nav элемента и запуск анимации, установленную на этом элементе?

$('a', 'nav').on('click', function(e) { 
    e.stopPropagation(); 
}); 

остановится нажмите на якоря из пузырьки до nav элемент.

0

Для якорем, чтобы возделывать его должны предоставил не пустой атрибут href

Вы предотвратить поведение по умолчанию на .click() как то

$('a.optional-class').click(function(e){ 
    e.preventDefault(); // it's way more powerful than... 
    // your code goes here 
    return false; // ... than this 
}); 

Дело в том, что оба этих писак (?) Работа другим способом 1) .preventDefault() просто сообщает браузеру, что этот якорь фактически не является якорем и не должен рассматриваться как один; предотвращает ANY <a /> Действие 2) return false сообщает браузеру, что пользователь на самом деле не нажал на ссылку; это не предотвратить прокрутку сайта, если

<a href="#some_id_here"> 
<!-- some code and height goes here... --> 
<div id="some_id_here"></div> 
+0

Не могли бы вы объяснить, почему 'e.preventDefault()' путь более мощным, чем 'вернуть false'? – adeneo

+0

Ну, кажется, я был неправ. В jQuery 'return false' ** равен ** для вызова' e.preventDefault() 'AND' e.stopPropagation() '. Но когда дело доходит до ванильного JS 'return false', запускается только' e.preventDefault() ', поэтому событие все равно будет пузыриться в дереве DOM. Источник: http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false – meeDamian