My page is built like that:
<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;
}
The intention is to drag the width of the my colums with mousedown/mouseup-events on the <div class="drag"/>
and it works nice. But there's also a click event on my <th>
-elements.
The problem is, when I release the mouse still on the <th>
, the click event still of <th>
triggers.
I've tried several things:
Is there any other way to prevent the click-event?
Edit:
I still want to keep the click-event on that <th>
but I dont want it to start after i've dragged
My page is built like that:
<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;
}
The intention is to drag the width of the my colums with mousedown/mouseup-events on the <div class="drag"/>
and it works nice. But there's also a click event on my <th>
-elements.
The problem is, when I release the mouse still on the <th>
, the click event still of <th>
triggers.
I've tried several things:
Is there any other way to prevent the click-event?
Edit:
I still want to keep the click-event on that <th>
but I dont want it to start after i've dragged
Have you tried
event.stopImmediatePropagation();
This will call stopPropagation, but also prevents other handlers within the same element from receiving the event.
http://api.jquery./event.stopimmediatepropagation/
$('th').click(function(e){
e.preventDefault();
}
You could set a flag variable when the drag starts (ondragstart
), then when it ends (ondragend
) you would unset it, and the onclick
would be wrapped in an if
condition that would check that flag.
Something like this (you'd need to adjust it to your code):
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
}
});