jQuery предотвращает выполнение действия до его запуска - PullRequest
1 голос
/ 27 апреля 2010

У меня небольшая проблема. У меня есть сборка Nevigation, которая открывается, когда мышь над, но также слушает нажатие клавиш, затем запускает ту же анимацию, как если бы мышь была нажата, просто дополнительно открывается подменю. Теперь, когда клавиша активна, и я иду с при наведении указателя мыши на эту навигацию запускается закрывающее действие, прежде чем я могу щелкнуть ссылку. Как я могу предотвратить это закрытие?

$(function () {

// keypress
$('html').live('keydown', function (e) {
   if ( e.keyCode == 67 ){

       $("#control").animate({width: '+=105', duration:400}, 
           function(){ 
               /*callback*/     
               $("#control").css({overflow:'visible'});
               $("#control-menu li a").fadeTo('fast', 1);
               $("#categories ul").css({marginLeft: '140px', display: 'block'}).fadeIn('slow');
               $('#control').mouseenter(function() { $(this).stop(); });
           }
       )
   }
}); 

// set easing method    
jQuery.easing.def = 'easeInOutExpo'; 

// make menu work   
$("#control-menu li a").css({opacity:'0.1'});
$("#control").hoverIntent(
 function(){
    $(this).stop().animate(
        {width: '+=105',
        duration:400}, function(){ 
            /*callback*/    
            $("#control").css({overflow:'visible'});
            $("#control-menu li a").fadeTo('fast', 1);
        })
 },
 function(){
    $("#control-menu li a").fadeTo('fast', 0.1);
    $(this).stop().animate(
        {width: '-=105', 
        duration:800}, function(){ 
            /*callback*/    
            $("#control").css({overflow:'hidden'});
        })  
 }); 

// END  
});

Заранее спасибо за помощь !!!!

С уважением, Daniel

Ответы [ 2 ]

0 голосов
/ 27 апреля 2010

возможно, мне следует разбить код abit и объяснить, что я хотел сделать. Я знаю, что был бы лучший способ наверняка, но я должен сказать, я абсолютно новичок:)

Хорошо, давайте разберемся:

  1. // заставить работать меню в основном обрабатывает меню появляется функция при наведении. Все там работает как шарм

  2. // нажатие клавиши здесь возникает проблема. При нажатии клавиши «C» на клавиатуре навигация выполняется так же, как и при наведении курсора мыши на эту навигацию и на точку над «Категории». Это открывает также подменю для этой точки. Теперь это все остается. Теперь, когда я подхожу с помощью мыши к этому меню и хочу щелкнуть пункт меню, я запускаю точку 1. Таким образом, меню ведет себя так, как должно, закрывается. Вот мой подход для вставки этой функции:

    $ ('# control'). Mouseenter (function () {$ (this) .stop ();});

непосредственно как функция после завершения нажатия клавиши, чтобы я мог ввести там мышь и даже не запускать закрытие.

Как я и согласился выше, был бы лучший способ сделать все это. Например, прочитайте все ссылки и динамически сгенерируйте keydown на основе html-структуры и так далее ... К сожалению, я новичок, поэтому я не получу его сам в этот момент

0 голосов
/ 27 апреля 2010

Похоже, что оно не запускает закрывающее действие, скорее, оно немедленно останавливает анимацию, открывая его.

Эта строка в вашем keydown обработчике:

$('#control').mouseenter(function() { $(this).stop(); });

Добавляет обработчик событий к #control, привязанный после того, как ваш текущий равен document.ready, поэтому он выполняется после. Это означает, что при наведении курсора он запускает анимацию, а затем сразу останавливает ее, поскольку при нажатии keydown добавляется обработчик для этого на mouseenter.

Если вы просто удалите эту строку, это остановит это поведение ... но, глядя на ваш код, мне непонятно, почему он вообще существует. Если вы можете описать, что это было добавлено для разрешения, должен быть лучший способ сделать это, не вызывая эту текущую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...