2015-05-05 96 views
1

我的页面是建立这样的:jQuery的鼠标按下/鼠标松开防止点击

<table> 
    <thead> 
     <tr> 
      <th> 
        Test 
        <div class="drag"/> 
      </th> 
      <th> 
       ...... 
       ...... 
      </th> 
     </tr> 
    </thead> 
</table> 
.drag { 
    position: absolute; 
    right: 0; 
    bottom: 0; 
    top: 0; 
    background-color: yellow; 
    width: 3px; 
} 

的目的是拖我colums上的<div class="drag"/>鼠标按下/鼠标松开事件的宽度和它的作品不错。但是我的<th>元素上也有一个点击事件。 问题是,当我释放鼠标仍在<th>上时,点击事件仍然是<th>触发器。几乎是在MouseDown事件

  • 将返回false在鼠标按下解除绑定click事件,并在再次绑定它的每一个事件

    • stopPropagation():

      我已经试过几件事情鼠标事件

    有没有其他方法可以防止点击事件?

    编辑: 我仍想保留的点击事件上<th>,但我不希望它开始后,我已经拖

  • +0

    请从你的代码中添加[MCVE(http://stackoverflow.com/help/mcve),所以我们可以看到它的工作(即使它与假动作)。现在,你不显示任何脚本(和问题只有脚本标记)和CSS不匹配发布HTML –

    回答

    1
    $('th').click(function(e){ 
        e.preventDefault(); 
    } 
    
    +0

    这是不是停止所需的单击事件,即使用户不拖N-落下? –

    +0

    好吧,是的。但他问:“是否有其他方法来阻止点击事件?” –

    +0

    我仍然想保持点击事件,但我不想让它开始,当我尝试拖动 – Yukuza

    0

    您可以设置一个标志变量当拖拽启动(ondragstart),那么当它结束时(ondragend),您将取消它,并且onclick将被封装在if条件中,该条件将检查该标志。

    像这样的东西(你需要将其调整到您的代码):

    var dragndrop = false; 
    
    $(".drag").on("dragstart", function(e) { 
        dragndrop = true; 
        // ...code here if needed... 
    }); 
    
    $(".drag").on("dragend", function(e) { 
        dragndrop = false; 
        e.preventDefault(); 
        // ...code here if needed... 
    }); 
    
    $("th").on("click", function() { 
        if (!dragndrop) { 
         // ... your code here 
        } 
    }); 
    
    +0

    我正在使用_mousedown_和_mouseup_事件。可悲的是,_click_事件在_mouseup_和dragndrop变量设置为false之后开始:( – Yukuza

    +0

    )您是否尝试将代码保留在'mousedown'和'mouseup'中,但添加'dragstart'和'dragend'只是为了设置/取消设置dragndrop标志? –