Kendo draggable - 暂时拖动拖动事件处理程序

时间:2014-01-22 05:03:54

标签: javascript jquery events drag-and-drop kendo-ui

这应该是一个简单的问题

所以,我有一个非常简单的kendoDraggable:

grid.kendoDraggable({
        . . .
        axis: "y",
        hint: getHint,
        drag: drag,
        dragend: dragend,
        dragstart: dragstart,
    });

我需要在'drag'处理程序中测试我的条件,并在条件为真时阻止拖动(因此不可能超出一些动态计算的边界)。 但是如果用户没有释放鼠标,即使他试图拖过那个边界,用户也应该能够将它拖到另一个方向。

如果我试图阻止事件的传播,它就不起作用了:

    function drag(e) {
        if (e.clientY < someDynamicValue) {
            e.preventDefault();
            e.stopImmediatePropagation();
            e.stopPropagation();
            return false;
        }

但是,如果我只是抛出任何异常,它就像我想要的那样。如果条件为真,它不会拖动,但如果条件为假则拖动:

        function drag(e) {
        if (e.clientY < someDynamicValue) {
            throw "any exception";
        }

发生了什么事?如果条件为真,如何真正停止拖动?

谢谢!

P.S。我知道'container'kendoDraggable属性会限制可拖动对象,但滚动效果不佳。

1 个答案:

答案 0 :(得分:1)

限制拖放操作的最佳方法是使用Jquery选择器进行过滤。要动态约束移动,您可以异步添加/删除html元素中的类。在以下示例中,用户只能拖动网格行,但不能拖动正在编辑的当前单元格。希望这有帮助!

$("tbody").kendoDraggable({
    container: $("#Goals"),
    filter: "tr td:not(.k-edit-cell)",  
    hint: (item) => this.dragHint(item),
    drag: (e) => this.dragging(e)
});