jQuery window.width 'if' 'else if' 'else' Статут не работает

0
function changeDrop() {
 var windowSize = $(window).width();

    if (windowSize > 450) {

              $('.menu-361').hover(
      function() {
            $('.menu-361 ul').show();
      },

      function() {
            $('.menu-361 ul').hide();
      });

        console.log("screen width is greater than 450px");

    }
    else if (windowSize <= 450) {

        $('.menu-361').on('hover', function () {
           //mousehover
         } , function(){
           //mouseout
         } );


        $('#dropbutton').click(function() {
        $('.menu-361 ul').toggle();
        $('#dropbutton p').toggle();
        });

        console.log("screen width is less than 450px");
    }

    else {}

 }

  changeDrop();
  $(window).resize(changeDrop);

После того, как значение if истинно, бит кода загружается в память, я думаю. И когда window.width составляет <= 450, код из состояния if или> 450 все еще работает. Любая идея, как сделать эту работу?

http://tidalbania.com/tidnew/

Ссылка в демо-версии на реальном сайте!

Если вам нужна скрипка, я могу обновить вопрос.

  • 1
    В чем проблема, хотя? Вы этого не говорите.
  • 1
    Если вы вызываете changeDrop() для изменения размера окна, вам нужно отменить привязку предыдущих обработчиков или лучше установить обработчик за пределами любого другого обработчика (кроме, возможно, готового) и фильтровать ширину вдовы внутри него. Кстати, ваше последнее заявление еще никогда не может быть достигнуто здесь
Показать ещё 4 комментария

3 ответа

2
Лучший ответ

Как отмечали другие, вы не должны привязывать обработчики событий при каждом изменении. Этого должно быть достаточно:

$('.menu-361').hover(hoverInOut);

$('#dropbutton').click(function() {
    $('.menu-361 ul').toggle();
    $('#dropbutton p').toggle();
});

function hoverInOut(event) {
    var windowSize = $(window).width();
    if (windowSize > 450) {
        if(event.type == "mouseenter")
            $('.menu-361 ul').show();
        else
            $('.menu-361 ul').hide();
    }
}
  • 0
    Да, спасибо за код. Я читал комментарии и пытался заставить его работать, я не эксперт в jQuery tho. Слава тебе
  • 1
    Рад слышать, что это работает для вас сейчас. Обратите внимание, что #dropbutton может выйти из синхронизации, если открыть меню, изменить размер экрана и затем .menu-361 . Изменение размера окна вниз приведет к неправильному состоянию кнопки. Я считал, что это небольшая проблема, поэтому я не обработал сброс кнопки в hoverInOut()
Показать ещё 1 комментарий
2

Ну для начала, ваш код по существу, if A, else if not A, else это лишнее. Просто, if A, else все в порядке.

В остальном вы добавляете новый обработчик событий за каждый раз, когда ваш код работает. Это много обработчиков событий! Вы также никогда не отсоединяете своих обработчиков, вместо этого пытаетесь повторно добавить пустые.

Найдите минутку, чтобы узнать, как работают обработчики событий ^ _ ^

  • 0
    Я просто использовал if и else ранее, но я пробовал это с разными значениями ширины, поэтому else, если есть положение, а else пусто. Забыл прояснить это. Я постараюсь заставить его работать на основе ваших комментариев.
1
function changeDrop() {
 var windowSize = $(window).width();

    if (windowSize > 450) {
              $('.menu-361').hover(
      function() {
            $('.menu-361 ul').show();
      },

      function() {
            $('.menu-361 ul').hide();
      });

        console.log("screen width is greater than 450px");
    }

    else {          
        $('.menu-361').unbind('mouseenter mouseleave');

        $('#dropbutton').click(function() {
        $('.menu-361 ul').toggle();
        $('#dropbutton p').toggle();
        });

        console.log("screen width is less than 450px"); 
    } 
 }

 changeDrop();
 $(window).resize(changeDrop);

Я думаю, что я исправил проблему с добавлением unbind ("mouseenter mouseleave"), когда ширина меньше 450 пикселей, удалив функцию привязанного привязки.

Так ли это должно быть сделано?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню