1

我被困在这里,无法继续前进。任何帮助/指针将不胜感激。

我有一个剑道网格,我正在网格上扩展一个函数,以便在触发更改事件之前,我绑定 mousedown 事件以获得用户的确认。只有在收到肯定的确认后,才应触发更改事件。在消极的确认中,我使用了'stopImmediatePropagation'来达到目的。

$("#KendoGrid").extendedFunction();

扩展函数定义如下:

$.fn.extendedFunction= function () {
    var $grid = $(this);
    var $kGrid = $grid.data("kendoGrid");

    if (!$kGrid) {
        return this;
    }
    else {
        $kGrid.tbody.on('mousedown', function (e) {
            showConfirmation(e);
        });
    }
};

function showConfirmation(e) {
    var dialogResult = confirm("confirm?");
        if (dialogResult) {
            return true;
        }
        else {
            e.stopImmediatePropagation();
            return false;
        }
    }
    return true;
}

因此,问题是当 dialogResult 为 false 时,立即传播按预期停止,但当对话框结果为 true 时.. 底层 kendo 事件没有被触发。

我也尝试过使用 kgrid.trigger("change"); 但这也不起作用。那么,有没有办法解决这个问题,或者无论如何重置 stopImmediatePropagation 以便在 dialogResult 为真时触发 kendo 更改事件?

提前致谢!!

4

2 回答 2

0

不是真正的答案,但评论太长了

您确定它是e.stopImmediatePropagation()在事件中调用的mousedown,它会抑制潜在的剑道事件吗?我令我震惊的是,抑制可能是由其他原因引起的,可能是确认对话框本身的显示,无论其结果如何。

如果是这样,那么您可能需要考虑完全不同的策略。

将确认放在与其允许/抑制的代码相同的事件线程中更为正常,而不是在一个线程中获取语句来抑制另一个事件。我猜你是想避免破解 Kendo 代码,但这最终可能是更容易的选择。

编辑

代码应简化如下:

$.fn.extendedFunction= function () {
    var $grid = $(this);
    var $kGrid = $grid.data("kendoGrid");
    if ($kGrid) {
        $kGrid.tbody.on('mousedown', function (e) {
            if (!confirm("Confirm?")) {
                e.stopImmediatePropagation();
            }
        });
    }
    return this;
};

如果正如您在下面所说的那样,e.stopImmediatePropagation()确实是禁止声明,那么更简单的代码可能会起作用。

于 2013-02-02T03:02:11.700 回答
0

这次我在一个恐怖的“框架”中工作,我不能使用任何不同的策略,就像这样(只是一个非常愚蠢的例子,但有效):

let stop = true;
$('#something').on('click', function (ev) {
    ev.preventDefault();
    if (stop) {
        ev.stopImmediatePropagation();

        // Why you want this? Here you can do tests, or whatever...

        // if those are success:
        stop = false;
        $('#something').click();
    }

    // do your stuff ...

可以帮助...

于 2019-11-25T21:09:27.383 回答