2014-04-22 8 views
0

jqueryCookie를 사용하여 낮/밤 모드로 하나의 버튼을 만들려고합니다. 나는이 코드가 무엇이 잘못되었는지 확신하지 못한다. 첫 번째 "if"문이 작동하고 쿠키를 추가하지만 일단 페이지를 새로 고치면 본문은 쿠키가 남아있는 동안 더 이상 graybg 클래스를 제거합니다.

$(document).ready(function() { 
    var btn = $('#modeSwitch'), 
    body = $('body'), 
    cookieVal = $.cookie("switchLight"); 

    btn.click(function(e) { 
     if (cookieVal != "2") { 
      $.cookie("switchLight", "2", { path: '/' }); 
      body.addClass('graybg'); 
      btn.text('Day'); 
     }else if (cookieVal == "2") { 
      btn.text('Day'); 
      body.addClass('graybg'); 
      $.removeCookie("switchLight", { path: '/' }); 
      $(this).text('Night'); 
     }; 
    }); 
}); 
+1

을 당신은 당신이 페이지를 새로 고침하는 단계; 클래스가 동적으로 추가되면 새로 고침시 사라집니다. –

+0

제안을 주셔서 감사합니다. 코드를 pageLoad() 함수에 넣고 문제가 해결되는지 확인합니다. – user2734550

+0

나는 가능한 결함이 있음을 안다. 당신은 document.ready에서만 cookieVal을 설정하고 있지만 그것을 결코 업데이트하지는 않는다. 이는 btn에서 발생하는 모든 클릭이 새로 고침 될 때까지 지정된 페이지 상태에 대해 항상 동일한 작업을 수행한다는 것을 의미합니다. –

답변

0

두 개의 클릭 핸들러가 아니라 하나의 클릭 핸들러 만이 버튼에 연결되어 있어야합니다. 현재는 두 클릭 핸들러가 모두 호출됩니다. 당신이 버튼 클릭 이벤트에 대한 응답을 제외하고 그 클래스를 할당하지 때문에

btn.click(function(e) { 
    if (cookieVal != "2") { 
     $.cookie("switchLight", "2", { path: '/' }); 
     body.addClass('graybg'); 
     $(this).text('Day'); 
    } else if (cookieVal == "2") { 
     body.addClass('graybg') 
     $.removeCookie("switchLight", { path: '/' }); 
     $(this).text('Night'); 
    }; 
}); 

페이지 새로 고침에 적용되는하지 graybg 클래스에 대한 우려를 해결하기 위해, 즉, 그래서 당신은 아마를 적용하려면이 같은 뭔가가 필요 페이지로드시 스타일.

cookieVal = $.cookie("switchLight"); 
if(cookieVal === '2') { 
    btn.addClass('graybg'); 
} 
+0

내 게시물을 편집하는 동안 빠른 답글을 남깁니다. 그래서 분명히 바닥에 여분의 코드를 제외하고 거의 같은 코드를 가지고 있습니다. 고마워요. 시도해 보겠습니다. – user2734550

1

이 같은 것을 사용할 수 있습니다 :

$(function(){ 
var btn = $('#modeSwitch'); 
var body = $('body'); 
var cookieVal = $.cookie("switchLight"); 
    if (cookieVal == "1") { 
     body.addClass('graybg'); 
     btn.val('Night'); 
    }else{ 
     body.removeClass('graybg'); 
     btn.val('Day'); 
    } 
    btn.on('click',function() { 
     var cookieVal = $.cookie("switchLight"); 
     if (cookieVal == "1") { 
      $.cookie("switchLight", "0", { path: '/' }); 
      body.removeClass('graybg'); 
      $(this).val('Day'); 
     }else{ 
      $.cookie("switchLight", "1", { path: '/' }); 
      $(this).val('Night'); 
      body.addClass('graybg'); 
     } 
    }); 
}); 
+0

pageLoad() {} 함수 안에 코드를 넣지 않으면 코드가 작동하지 않습니다. 나는 당신의 방식으로 $ .removeCookie() tho를 사용하는 것을 피합니다. 매우 똑똑한 움직임 – user2734550

+0

내가 이해할 수없는 한 가지는 왜 초기에 설정된 cookieVal이있을 때 click function 아래에서 setup var cookieVal을 다시 설정하는 것입니까? – user2734550