Как изменить элемент DOM во время события MouseUp, не прерывая событие двойного щелчка - PullRequest
0 голосов
/ 25 февраля 2011

Мне нужно удалить имя класса CSS из целевого элемента DOM во время обработчика события mouseup, но, похоже, это предотвращает срабатывание события двойного щелчка.Я предполагаю, что это связано с тем, что я изменяю элемент DOM, к которому привязан двойной щелчок, и JavaScript отменяет очередь событий, потому что элемент изменился.Единственное, что я до сих пор придумал, это поместил удаление класса CSS в тайм-аут около 300 мс или около того ...

Вот примерный код.jQuery просто для удобства.

var myElm = $(someElm);
    myElm
      .mouseup(function(e) { $(this).removeClass("abc"); })
      .dblclick(function (e) { alert ('hi!'); });

Никогда не скажу привет!

У кого-нибудь есть изящное решение для этого?

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Вероятно, удаляя класс "abc", вы изменяете размер или видимость объекта, который становится не щелкаемым, поэтому событие не будет инициировано.Попробуйте сохранить эти свойства (например, ширину, высоту, видимость) в другом классе, который вы не удалите.

Даже у меня это отлично работает.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style type="text/css">
        .style1
        {
            width: 100px;
            height: 100px;
            border: solid 1px black;
            background-color: Green;
        }
        .style2
        {
            background-color: Red;
            width: 200px;
            height: 200px;
        }
    </style>
    <script type="text/javascript" src="Scripts/jquery/jquery-1.4.2.js"></script>
    <script type="text/javascript">
        $(function () {
            var myElm = $('.style2');
            myElm
              .mouseup(function (e) { $(this).removeClass("style2"); })
              .dblclick(function (e) { alert('hi!'); });
        });

    </script>
</head>
<body>
    <div class="style1 style2" />
</body>
</html>
0 голосов
/ 25 февраля 2011

Я думаю, что любой из этих подходов будет работать для вас:

  .mouseup(function(e) { 
    $(this).removeClass("abc"); 
    e.stopPropagation();  
  })

и

  .mouseup(function() { 
    $(this).removeClass("abc"); 
    return false;
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...