2016-01-14 5 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 он пытается найти эту конкретную функцию в качестве обработчика эти события на этом элементе. Но поскольку вы передаете анонимную функцию в обоих случаях, при использовании on и off они представляют собой два новых экземпляра функции, хотя они оба делают то же самое. Поэтому он никогда не найдет обработчик для удаления. Где-то за кулисами воображают, что обе эти функции имеют уникальное место в памяти, они не указывают на одно и то же место, поскольку они анонимны и определены в двух областях. Не передавая функцию 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; 
} 

Это будет работать, так как мы проходим ту же ссылку на функцию как on и off.

+1

Благодарим вас за быстрый ответ, он отлично работает! : D – VeloFX

+0

Вы очень желанны! Рад был помочь. Удачи! – AtheistP3ace

0

Это происходит потому, что e.preventDefault() предотвратит событие по умолчанию, в вашем случае, прокрутку.

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

Увидимся.

Смежные вопросы