jQuery .off()没有删除事件

时间:2017-01-17 07:22:48

标签: javascript jquery

我的设置向php脚本发出ajax请求,从服务器获取一些图像并显示它们。在ajax请求期间,我启用了一些额外的控件。我有两种图像模式,一种可以显示更大的图像版本,另一种可以让我对它们进行排序。

我实现了一个复选框,以便我可以在两种模式之间切换。每当我点击搜索并调用ajax请求时,图像都对应于复选框创建时的模式。

我想要做的是点击此复选框,这样我就可以交换模式而无需再次搜索。

$.ajax({
    url: './search.php',
    type: 'POST',
    success: function(data) {
        $("#images").html(data);  
        enableControls();
    },

这是ajax请求的片段,我收到图像,将它们添加到我的页面,然后启用控件。

$('#sortable').change(function() {
    enableControls();
});

这是我允许我的复选框更改控件状态的代码段。

function enableControls() {
    $('.img-responsive').off();
    if($('#sortable').is(":checked")) {
        $('.img-responsive').on('dblclick', sortableDoubleClick);
    }
    else {
        $('.img-responsive').on('dblclick', imgDoubleClick);
    }
}

这是我启用双击行为的代码段。在排序模式下双击它将使图像转到图像行/列的前面(左上角)。在非排序模式下双击,将显示更大版本的图像。

img-responsive类是从搜索返回的所有图像的类,以及我如何将它们作为一组引用。

不幸的是,该行

$('.img-responsive').off();

不按我想要的方式工作。我希望它完全禁用现有控件,以便我可以设置我想要的任何新控件。它没有这样做。现在发生的是我可以获得双击控件。

所以,让我说我在非排序模式下搜索,然后点击我的复选框将其置于排序模式。当我双击图像时,它会打开它的较大版本并将其移动到左上角。

我该如何解决这个问题?我假设我调用的方式.off()是不正确的,但据我所知,.off()应该删除选择器的所有事件处理程序,那么为什么我仍然保留原始事件处理程序呢?

1 个答案:

答案 0 :(得分:1)

我最终解决了我的问题。在代码部分:

$('.img-responsive').on('dblclick', imgDoubleClick);

还有一些额外的触控控制代码:

$('.img-responsive').each(doubletapCover);

出于某种原因,即使代码路径从未发生过,它似乎也会调用该代码。我做了一个改变,所以它没有被调用,它解决了我的问题。

感谢所有试图提供帮助的人。