функция removeAttr от jquery внутри $ (document).ready не работает

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Застрял с некоторыми проблемами. У меня есть страница, где я использую @media для создания мобильной и планшетной версии отдельно. В мобильной версии я использую плагин mmenu jquery для создания скользящего меню. В планшетной версии я не хочу использовать это меню, но все же планирую использовать его html. Поэтому я решил удалить идентификатор, который показывает плагин mmenu, где ему нужно создать скользящее меню. Но по какой-то причине removeAttr от juery работает не так, как я ожидал. Ps: Я довольно новичок в js, поэтому я могу не знать о проблемах, связанных с работой браузера.

Я получил этот код (html довольно прост — nav, который обертывает кучу ul) :

    var func = function() {
            var width = $(window).width();
            var menu = $(".menu");
            /*if it is tablet*/
            if (width > 401) {
                menu.removeAttr("id");
            }

            /*loading mmenu*/
            $(function() {
                $('#my-menu').mmenu({
                    slidingSubmenus: false,
                    zposition: "next"
                });
            });

        };

        $(document).ready = func();
  

Я буду очень рад, если кто-нибудь разъяснит, в чем моя ошибка.

Комментарии:

1. Вы не можете быть уверены width > 401 , что вычисляется правильно, например, ширина рассматривается как число. Используйте parseInt(width) > 401 вместо этого и посмотрите, что произойдет.

2. @davidkonrad метод width в jquery всегда возвращает число.

3. Удаление идентификатора не кажется хорошим подходом. Почему бы просто не инициализировать плагин только тогда, когда width < 402 ?

4. $(document).ready = func(); это неверно.

5. PS $(function() { — это то же самое, $(document).ready(function(){ что и . Нет причин использовать одно внутри другого.

Ответ №1:

Вы неправильно привязываете document.ready . Это должно быть

 $(document).ready(func);
  

Вы не устанавливаете свойство и не вызываете свою функцию.

Комментарии:

1. Итак, я правильно понимаю: в моем коде я пытался установить значение ready с помощью моей функции, но согласно документации я должен передать свою функцию как свойство .ready() ?

2. @errdayvillain: Да. .ready() это уже свойство, это функция. Вам нужно ее вызвать. Вы заменяли эту функцию новым значением 🙂

Ответ №2:

Вместо удаления идентификатора из #my-menu , вы можете переместить функцию, чтобы создать меню внутри функции проверки ширины. Таким образом, меню создается только в том случае, если ширина больше 401. В противном случае она вообще пропускается.

 if (width > 401) {
    $(function(){
        $('#my-menu').mmenu(...);
    });
}
  

Комментарии:

1. Верно, за исключением обратного — мобильное меню для маленьких экранов.