我的设置向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()应该删除选择器的所有事件处理程序,那么为什么我仍然保留原始事件处理程序呢?
答案 0 :(得分:1)
我最终解决了我的问题。在代码部分:
$('.img-responsive').on('dblclick', imgDoubleClick);
还有一些额外的触控控制代码:
$('.img-responsive').each(doubletapCover);
出于某种原因,即使代码路径从未发生过,它似乎也会调用该代码。我做了一个改变,所以它没有被调用,它解决了我的问题。
感谢所有试图提供帮助的人。