2015-06-22 1 views
0

Я делаю dragscroller для своего div. Драйвер работает, но div, который я перетаскиваю, содержит около <a> тегов внутри. Когда я захватываю div в том же положении, что и тег <a> (или ссылка), он перенаправляет меня на связанную страницу.event.preventDefault() не препятствует нормальному <a> action

Я использую эти коды, чтобы предотвратить их перенаправление после захвата:

//Inside the mouseMoveHandler 
    if(delta!=0){ 
     prevent=1; 
    } 
//Inside the mouseUpHandler 
    if(prevent){ 
     alert('at this point he should prevent clicking on a link, but he does not'); 
     prevent=0; 
     event.preventDefault(); 
     return false; 
    } 

Оповещение появляется на экране, но, кажется, не работают event.preventDefault(); и return false;.

Я также пробовал event.stopPropagation(), чтобы остановить ссылку по умолчанию, чтобы она не возникала.

Фрагменты кода выше, также может быть найдено в полном коде ниже:

var dragscroll= { 
      mouseDownHandler : function(event) { // mousedown, left click 
       // Initial coordinates will be the last when dragging 
       event.data.lastCoord = event.clientY; 
       $.event.add(document, "mouseup", dragscroll.mouseUpHandler, event.data); 
       $.event.add(document, "mousemove", dragscroll.mouseMoveHandler, event.data); 
      }, 
      mouseMoveHandler : function(event) { // User is dragging 
       // How much did the mouse move? 
       delta = event.clientY - event.data.lastCoord; 
       // Set the scroll position relative to what ever the scroll is now 
       event.data.scrollable.scrollTop(event.data.scrollable.scrollTop() - delta); 
       // Save where the cursor is 
       event.data.lastCoord=event.clientY 
       if(delta!=0){ 
        prevent=1; 
       } 
      }, 
      mouseUpHandler : function(event) { // Stop scrolling 
        $.event.remove(document, "mousemove", dragscroll.mouseMoveHandler); 
        $.event.remove(document, "mouseup", dragscroll.mouseUpHandler); 
       if(prevent){ 
        alert('at this point he should prevent clicking on a link'); 
        prevent=0; 
        event.preventDefault(); 
        return false; 
       } 

      } 
    } 

ответ

0

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

Проблема связана с событиями, так что если вы установите preventDefault на контейнер, события не перейдут к его родительскому объекту и не будут влиять на детей, так как они передают ему событие

 Смежные вопросы

  • Нет связанных вопросов^_^