Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery Cookie并没有像它应该的那样在每次单击时进行设置_Javascript_Jquery - Fatal编程技术网

Javascript jQuery Cookie并没有像它应该的那样在每次单击时进行设置

Javascript jQuery Cookie并没有像它应该的那样在每次单击时进行设置,javascript,jquery,Javascript,Jquery,我想做一个布局切换。用户单击名为display的某个div,然后将名为display grid的类切换到该类,以确保直观性 同时,它为我的布局打开和关闭一些类 我有一个左栏和一个右栏,目的是让用户选择哪一列位于页面的哪一侧。例如,侧边栏可以位于页面的左侧或右侧 每次他们切换此更改时,它都会从我的另外两个div中添加或删除类(该类只是添加了一个float:left;和float:right;,并在每次切换单击时将它们交换出去) 现在,在每次切换时,它还将状态保存到用户cookie中,因此如果他们更

我想做一个布局切换。用户单击名为
display
的某个div,然后将名为
display grid
的类切换到该类,以确保直观性

同时,它为我的布局打开和关闭一些类

我有一个左栏和一个右栏,目的是让用户选择哪一列位于页面的哪一侧。例如,侧边栏可以位于页面的左侧或右侧

每次他们切换此更改时,它都会从我的另外两个div中添加或删除类(该类只是添加了一个
float:left;
float:right;
,并在每次切换单击时将它们交换出去)

现在,在每次切换时,它还将状态保存到用户cookie中,因此如果他们更改侧边栏位置,它将在整个站点中为他们保留

我的代码很邋遢,我不知道怎么做,但我做到了,设法让它工作,然后它就停止了。除了cookie之外,上面描述的所有东西都工作了。现在,cookie给了我一个问题,他们没有在每次更改时设置cookie。这很奇怪,因为大约10个小时前我让它工作,所以我不知道发生了什么结束

我希望对Javascript有更多了解的人能帮助我实现这一点,甚至可能改进这一点,但现在让它实现会让我大开眼界

下面是我目前掌握的代码

没有包括jQuery库,但我已经包括了cookie插件

 $(window).load(function(){
jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires='; expires='+date.toUTCString()}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('')}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};
HTML


您的cookie代码前面有一个return语句,因此永远不会到达cookie代码:

    // save preference to Cookie
    return false;
    $.cookie('MODE_SWITCHER', postmode, {
      path: '/',
      expires: 10000
    });
    return false;

删除第一个return语句并让cookie代码执行。

在设置cookie之前,您有一个
return false;
。删除它应该可以工作。

感谢您捕捉到这一点,这确实是一个错误,但这是发布到此处的过程中出现的问题,因此删除它似乎没有任何帮助这很奇怪,因为我可以从点击事件中取出cookie设置部分,它正在设置cookie,然后我可以在点击事件中设置一个警报,cookie应该在哪里设置,并且设置到了这个程度,我现在很迷茫,我发现了一些问题。似乎大部分时间都在编写cookie…jQuery文档是错误的当他们说你可以使用`$.attr('class','replacement class')`来代替使用
.removeClass('left sidebar').addClass('right sidebar')
,因为我把它切换回了那个方法,并且大部分都能工作。我假设,当类名有时可能为空时,第一个方法就不起作用了
<span class="display" title="Change Layout">List/Grid</span>

<div id="content-left"> Left column content </div>

<div id="content-right"> Right column content </div>
.display {
    float:left;
    width: 49px;
    height: 20px;
    margin-top: -2px;
    background: url(http://codedevelopr.com/uploads/grid-switcher.gif) no-repeat 0 0;
    text-indent: -5555em;
    overflow: hidden;
    cursor: pointer;
     -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -o-user-select: none;
    user-select: none;
}
.display-grid {
    background: url(http://codedevelopr.com/uploads/grid-switcher.gif) no-repeat 0 -20px;
}

.grid-content .gridrow {

border-bottom: 1px solid #ECEDE8;

margin: 0 15px;

}

.left-sidebar{
    float:left !important;
    margin-right:15px;
}
.right-sidebar{
    float:right !important;
    margin-right:15px;
}
    // save preference to Cookie
    return false;
    $.cookie('MODE_SWITCHER', postmode, {
      path: '/',
      expires: 10000
    });
    return false;