我有两个这种形式的饼干,一个是文本,一个是单选按钮选择。文本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 :(得分: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;
你是否有任何理由使用这样的cookie而不是将表格张贴到服务器端脚本(例如php)?这可能有所帮助:http://books.msspace.net/mirrorbooks/php5/067232511X/ch04lev1sec2.html
Javascript Cookie
您需要阅读此内容(至少):http://www.w3schools.com/js/js_cookies.asp
document.cookies不是一个简单的字符串变量,如果您尝试使用console.log(document.cookies),您会看到类似这样的内容:
"cookieName=abc; char=2; __utma=45159731; __utmc=45159731;"
这是为页面设置的所有cookie的连接,=之前的部分是cookie名称,=之后的部分是cookie值,而分号是将cookie分开。如果您设置一个没有cookie名称的cookie(正如您所做的那样),字符串将如下所示:
"2; cookieName=abc; char=2; __utma=45159731; __utmc=45159731;"
注意开头的额外“2”。这就是第二个cookie覆盖第一个cookie的原因 - 因为你没有为cookie指定名称,所以它只是用新值重新设置了第一个cookie。