Наличие события jQuery .click () срабатывает только один раз, когда внутри другого события .click () - PullRequest
2 голосов
/ 03 апреля 2012

Если у меня есть событие jQuery .click (), запускающее как "body", так и "div", как я могу заставить его выполняться только для div, а не для тела при нажатии на div?По сути, я создаю свое собственное контекстное меню и хочу щелкнуть в любом месте за пределами элемента (в данном случае «div.button»), чтобы закрыть меню.

Элементарный пример:

  $("body").click(function(event){
    if($("div.menu").is(":visible")){
      $("div.menu").hide();
    }
  });

  $("div.button").click(function(event){
    $("div.menu").show();
  });

Как вы можете догадаться, $ ("body"). Click () запрещает / скрывает меню от показа.

Небольшое руководство будет очень полезно.Спасибо за чтение!

Ответы [ 3 ]

6 голосов
/ 03 апреля 2012
5 голосов
/ 03 апреля 2012

Вы должны прекратить распространять подобное событие

$("div.button").click(function(event){
  event.stopPropagation();
  // do something
});

чем будет нажата только ваша кнопка

1 голос
/ 03 апреля 2012

Вы хотите использовать event.stopPropagation() в элементе click. Итак:

$( 'div.button' ).click(function( e ) {
    e.stopPropagation();
    $( 'div.menu' ).show();
});
...