2016-01-14 91 views
1

嘿傢伙我有這個jQuery代碼的問題。其實它工作正常,但我不能關閉div後滾動我的滾輪。JQuery啓用和禁用滾動

$(document).ready(function() { 
    $("#add_item_inventory_toggle").click(function() { 
     $("#add_item_inventory").fadeOut("fast"); 
     $("#add_item_inventory_toggle").hide(); 

     $('body').off('scroll mousewheel touchmove', function(e) { 
      e.preventDefault(); 
      e.stopPropagation(); 
      return false; 
     }); 
    }); 

    $("#inventory_content_add_items").click(function() { 
     $("#add_item_inventory").fadeIn("fast"); 
     $("#add_item_inventory_toggle").show(); 

     $('body').on('scroll mousewheel touchmove', function(e) { 
      e.preventDefault(); 
      e.stopPropagation(); 
      return false; 
     }); 
    }); 
}); 

回答

2

我相信你的問題是這樣的:

$('body').off('scroll mousewheel touchmove', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    return false; 
}); 

這應該是:

$('body').off('scroll mousewheel touchmove'); 

當你傳遞一個函數來off它試圖找到特定功能作爲一個處理程序關於那個元素的事件。但是既然你在這兩種情況下傳遞了一個匿名函數,當使用onoff時,它們是該函數的兩個新實例,即使它們都執行相同的操作。所以它永遠不會找到要移除的處理程序。在幕後的某個地方,想象這兩種功能在內存中都有獨特的地方,它們並不指向同一個地方,因爲它們是匿名的並且定義在兩個區域中。通過不傳遞一個函數到off它只會刪除那些事件附加到該元素的任何函數。現在

,如果你這樣做:

$(document).ready(function() { 
    $("#add_item_inventory_toggle").click(function() { 
     $("#add_item_inventory").fadeOut("fast"); 
     $("#add_item_inventory_toggle").hide(); 

     $('body').off('scroll mousewheel touchmove', stopScrolling); 
    }); 

    $("#inventory_content_add_items").click(function() { 
     $("#add_item_inventory").fadeIn("fast"); 
     $("#add_item_inventory_toggle").show(); 

     $('body').on('scroll mousewheel touchmove', stopScrolling); 
    }); 
}); 

function stopScrolling (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    return false; 
} 

,因爲我們正在經歷同樣的功能,參照上述兩個onoff它的工作。

+1

感謝您的快速響應,它的作品非常好! :D – VeloFX

+0

你很歡迎!樂於幫助。祝你好運! – AtheistP3ace

0

發生這種情況是因爲e.preventDefault()將防止發生默認事件,在您的情況下,滾動。

http://jsfiddle.net/DHz77/1/

再見。