【问题标题】:Kendo draggable - suspend dragging temporarily from drag event handlerKendo 可拖动 - 从拖动事件处理程序中暂停拖动
【发布时间】:2014-01-22 05:03:54
【问题描述】:

这应该是一个简单的问题

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

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

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

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

    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";
        }

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

谢谢!

附:我知道限制可拖动对象的“容器”kendoDraggable 属性,但它在滚动时效果不佳。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这是个好主意。以前我使用容器来约束拖动移动,但它与 NiceScroll 的效果很差。看来我可以尝试只允许在具有特定类别的单元格上方拖动。我得试试,非常感谢这个建议!
    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2019-06-13
    • 2011-03-26
    相关资源
    最近更新 更多