функция переключения с документом нажмите, чтобы закрыть - PullRequest
0 голосов
/ 04 ноября 2011

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

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

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

<ul>
<li id='drop'>down</li>
<ul id='menu'>
<li>menu 1</li>
<li>menu 2</li>
<li>menu 3</li>
</ul>

$('li#drop').toggle(function () {
    //show its submenu
    $('ul', this).show();
}, function () {
    //hide its submenu
    $('ul', this).hide();
}
);
$(document).click(function(){
    $('ul#menu').hide();
});

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Вместо использования .toggle() вы можете проверить, виден ли ul при нажатии кнопки li

$('li#drop').click(function(e){
  e.stopPropagation();

  if($('ul#menu').is(':visible')) {
    $('ul#menu').hide();
  }
  else {
    $('ul#menu').show();
  }
});
2 голосов
/ 04 ноября 2011

toggle() хранит данные об объекте, подлежащем переключению, чтобы отслеживать его состояние переключения (поэтому он знает, какую функцию вызывать в следующий раз, когда он активирован), поэтому при изменении состояния скрытия объекта без обновления toggle() эти данные, они запутываются и вызывают неправильную функцию при следующем ее выполнении.

Чтобы решить эту проблему, вам, вероятно, не следует использовать toggle(), а просто реализовать переключающее поведение самостоятельно, чтобы оно работало правильно при вызове из нескольких разных мест.

...