2014-12-15 2 views
0

У меня есть два файла cookie в этой форме, один - это текст, один - выбор переключателя. Текстовый cookie работает отлично, но переключатель не работает.JQuery cookie не читается или не распознается правильно

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

Что на самом деле происходит: Введите текст, сделайте выбор, нажмите кнопку бутона. Отправляет вас на следующую страницу, где отображается текст, но ничего не происходит из выбора переключателя.

спасибо заранее.

JSfiddle - http://jsfiddle.net/q7nja8j9/

HTML -

<form action="javascript:void(0)"> 
    <input type="text" name="cookie" id="cookie" value=""> 
    <div id="pics"> 



    </div> 
    <div id="radio"> 
    <input type="radio" name="char" id="char1" value="1"> 
    <input type="radio" name="char" id="char2" value="2"> 
    <input type="radio" name="char" id="char3" value="3"> 
    </div> 
<input type="button" name="Fight" id="saveCookie" value="Fight" onclick="window.location.href='Battle.html'"> 
</form> 

JS-

$(function(){ 
    // attach event listener to save cookie button 
    $('#saveCookie').click(function(){ 
     // set cookie expiration to 1 year from today 
     var expDate = new Date(); 
     expDate.setFullYear(expDate.getFullYear() + 1); 
     // create cookie string 
     var cookieStr = $('#cookie').val() + ";expires=" + expDate.toGMTString(); 
     // create cookie 
     var cookieChar = $('input[name="char"]:checked').val() + ";expires=" + expDate.toGMTString(); 
     document.cookie = cookieStr; 
     document.choice = cookieChar; 
    }); 

}); 

ответ

0

Я думаю, связан этот вопрос: How do I create and read a value from cookie?

Прежде всего вы должны document.choice = cookieChar; вместо document.cookie = cookieChar;

Но из того, что я тестировал, он не должен работать в любом случае, так как в точке, где у вас есть document.cookie = cookieStr;, значение cookieStr - это что-то вроде abc;expires=Tue, 15 Dec 2015 02:20:13 GMT, но вам также нужно указать имя файла cookie. Так оно и должно быть:

document.cookie = 'cookieName=' + cookieStr; 
document.cookie = 'char=' + cookieChar; 

Есть ли какая-либо причина вы используете кук, как это вместо проводки формы к скрипту сервера (например, PHP.)? Это может помочь: http://books.msspace.net/mirrorbooks/php5/067232511X/ch04lev1sec2.html

Javascript печенье

Вы должны прочитать это (как минимум): http://www.w3schools.com/js/js_cookies.asp

document.cookies не простая переменная строка, если вы пытаетесь console.log (document.cookies), вы увидите что-то вроде этого:

"cookieName=abc; char=2; __utma=45159731; __utmc=45159731;" 

Который является concatention всех куки, установленные для страницы, часть до = это печенье на я, часть после = - значение cookie, а полуколоны разделяют файлы cookie. Если вы установите печенье без имени печенья (как вы делаете) строка будет выглядеть следующим образом:

"2; cookieName=abc; char=2; __utma=45159731; __utmc=45159731;" 

Обратите внимание на дополнительные «2» на старте. Вот почему второй файл cookie перезаписывает первый, потому что вы не указали имя для файла cookie, поэтому он только что переустановил первый файл cookie с новым значением.

+0

Да, я использую причину для печенья, это лишний кредит для моего проекта. При этом я не понимаю, почему текст отображается правильно на следующей странице, а не на кнопках. Причина, по которой у меня есть Document.choice вместо cookie, заключается в том, что я пытаюсь сделать два разных файла cookie. При изменении документа.изменителя на document.cookie работает переключатель, но теперь он перезаписывает текстовый файл cookie. Как можно использовать два разных файла cookie? –

+0

, указав им два разных имени печенья (как показано в блоке кода выше), вам нужно опубликовать свой код из battle.html, где вы извлекаете значения из файлов cookie, поскольку у вас, вероятно, есть некоторые ошибки там. Пожалуйста, прочитайте весь ответ, прежде чем задавать вопрос, на который уже ответили, в следующий раз. – Luke

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