Javascript click и mousedown конфликтуют - программирование

Javascript click и mousedown конфликтуют

У меня есть определенный сценарий, в котором я использую click для вставки div, а затем mousedown в этот div для его перетаскивания. Я привязал click к родительскому контейнеру и mousedown к самому div. Но когда я mousedown в div, он также запускает щелчок на родительском объекте, поэтому вставляя div с несколькими путями вместо перетаскивания уже добавленного div!

Есть ли способ решить эту проблему? Я не могу отменить click, так как мне нужно добавить 2 div с помощью click, а затем привязать mousedown к ним.

Обновление: я использую тип привязки selector.on(event, handler).

4b9b3361

Ответ 1

Попробуйте этот путь. Поскольку event.stopPropagation не останавливает событие события click от мыши вниз. События мыши и нажатия не связаны друг с другом.

 var mousedDownFired = false;

  $("#id").mousedown(function(event){
      mousedDownFired =true;
      //code
  });

  $("#id").click(function(event){
     if(mousedDownFired)
      {
         mousedDownFired = false;
         return;
      }
      //code
 });

Обновлено:

NO. События мыши вызываются таким образом

1) MouseDown

2) Нажмите

3) MouseUp

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

Ответ 2

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

Например:

$("#parentDiv").on('click','.childDiv',function() {
    event.stopPropagation();
}).on('mousedown','.childDiv',function() {
    // your dragging code
});

Когда вы предоставляете селектор функции .on(), передаваемая функция вызывается для потомков, соответствующих этому селектору.

Ответ 3

Вы можете использовать event.stopPropagation().

Пример:

$("#button").mousedown(function(event){
event.stopPropagation();
// your code here
});

$("#button").click(function(event){
event.stopPropagation();
// your code here
});

Посмотрите на эту страницу http://api.jquery.com/event.stopPropagation/

Ответ 4

            var timestamp = 0;
    jQuery('ul.mwDraggableSelect a',element).mousedown(function(event){
        timestamp = new Date().getTime();
    });

    jQuery('ul.mwDraggableSelect a',element).click(function(event){
        var interval = 400;//if a mousedown/mouseup is longer then interval, dont process click
        var timestamp2 = new Date().getTime();
        if((timestamp2 - timestamp)>interval){ return false; }

                    /* your code here */
            });