2015-05-05 98 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標誌? –