2017-01-17 52 views
-2

我设置了一个PHP脚本的ajax请求,从服务器获取一些图像并显示它们。在ajax请求期间,我启用了一些额外的控件。我有两种图像模式,一种可以显示图像的大图,另一种可以让我对图像进行分类。jQuery .off()不删除事件

我实现了一个复选框,以便我可以在两种模式之间切换。每当我点击搜索并调用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

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

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

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

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

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

感谢大家谁试图帮助。

+0

好的工作伙伴。 。 –