сохранить мета ширину в переменной сеанса Javascript

Я работаю над страницей, которую я хочу, когда пользователь нажимает «полную версию», задает ширину мета так, чтобы она выглядела как настоящая сеть, скрипт выполняет что-то вроде этого:

((function ( $ ) {

    var mobile = true;

    var targetWidth = 1100;

    $('.mobile-to-desktop').click(function(e) {
        e.preventDefault();
        $('meta[name="viewport"]').attr('content', 'width=' + targetWidth);
        $('.watch-mobile').addClass('active');
        window.sessionStorage.setItem("mobile", "false");
    });

    $(function() {
        if (window.sessionStorage.getItem("mobile") === false) {
            $('meta[name="viewport"]').attr('content', 'width=' + targetWidth);
            $('.watch-mobile').addClass('active');
        }
    });

})(jQuery));

Это прекрасно работает, проблема в том, что когда я меняю php, ширина снова меняется, и я хотел посмотреть, можно ли ее сохранить каким-либо образом.

Я пытался использовать sessionStorage и localStorage, но у меня это не работает, так же, как я использую что-то не так.

1
задан 07.04.2016, 13:04
1 ответ

Метод sessionStorage.getItem возвращает DOMString (это главным образом то же самое, что и String в javascript) из-за, что и сравнение window.sessionStorage.getItem("mobile") === false всегда он возвратится false так как ты используешь оператор строгого сравнения ===.

Ты можешь использовать оператор беспутного сравнения == но это в общем не рекомендуется, так как это шрифт вирусов, очень тяжелых для того, чтобы находить. В Вашем месте ты должен сравнивать с точной стоимостью, которую ты поместил "false" как string.

(function($) {

  $(function() {
     var mobile = true;

     var targetWidth = 1100;

     function setDesktopMode() {
       $('meta[name="viewport"]').attr('content', 'width=' + targetWidth);
       $('.watch-mobile').addClass('active');
     }

     $('.mobile-to-desktop').click(function(e) {
       e.preventDefault();
       setDesktopMode();
       window.sessionStorage.setItem("mobile", "false");
     });

     if (window.sessionStorage.getItem("mobile") === "false") {
       setDesktopMode();
       mobile = false;
     }

  });

}(jQuery));

Первый раз ты функционирует, потому что ты это меняешь с jquery, но секунда стоимость сравнивается правильно и не функционирует.

В моем примере я завернул весь код в событие DOMReady jquery, так как не должны ни устанавливаться драйверы событий, ни искать элементы до тех пор, пока DOM не не был загружен полностью.

Также я удалил избыточные скобки в IIFE

((function() {
   //código
})());

functiona равно как

(function() {
   // código
} ());

// o

(function() {
   //código
})();

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

1
ответ дан 24.11.2019, 14:37
  • 1
    совершенный!! функционируй правильно, большое спасибо!!! – Imanol 07.04.2016, 17:28