2015-08-13 2 views
0

я что-то на самом деле просто не хватает ...Не удается проверить существующий куки правильно

У меня есть кнопка, которая устанавливает куки:

<button id="gotit" >Got it</button> 

JS:

$('#gotit').click(function() { 
      setCookie("gotIt", 'True', 30); 
     }); 

И I a checkGetIt() функция с простым, если иное:

function checkGetIt() { 
      var gotIt = getCookie("gotIt"); 
      if (gotIt === "") { 
       console.log('no such cookie'); // should do this until button pressed 
      } else { 
       console.log('cookie exists'); // this displays all the time, which is wrong 
      } 
     } 
     checkGetIt(); 
     var z = document.cookie; 
    console.log('existing cookies: ' + z); 

Но я всегда получаю console.log('cookie exists');, даже если console.log('existing cookies: ' + z); ничего мне не дал, прежде чем нажимать кнопку.

setCookie() и getCookie() - это общие функции, которые раньше работали на меня.

JSFIDDLE here.

ответ

2

У вас есть проблема в следующей строке:

if (gotIt === "") 

Либо изменить его на:

if (gotIt === null) // This will check for null. 

Или:

if (gotIt == null) // This will check for null or undefined. 

Дальнейшее чтение: Which equals operator (== vs ===) should be used in JavaScript comparisons?

Вы всегда должны использовать «===» (без преобразования типов), за исключением проверки «undefined или null», в этом случае лучший способ сделать это - сравнение «== null».

+0

Спасибо, что работает. Можете ли вы прокомментировать, в каких случаях, если (cookie == "") может работать, но в некоторых случаях это должно быть (cookie === null)? – Andrejs

+1

'null' - это когда cookie не установлен. Иногда cookie может быть установлен, но в пустую строку '' ''. – evolutionxbox

+1

Вы делали if (cookie === ""), который на английском языке был бы «если переменная cookie пустая строка», и, как вы можете видеть в своей функции getCookie, вы возвращаете нуль. Следовательно, это условие всегда будет возвращать false. Для получения дополнительной информации см. Ссылку, указанную в ответе. Если у вас все еще есть сомнения, сообщите нам об этом. – Charmander

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