2017-01-17 107 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

好的工作夥伴。 。 –