2012-08-15 5 views
0

I 쿠키의 설정 값 저장 다음 변수가 : 쿠키 변수의개폐 패널

var filterDate = $.cookie('filterDate'); 
    var filterArea = $.cookie('filterArea'); 
    var filterCategory = $.cookie('filterCategory'); 
    var filterType = $.cookie('filterType'); 
    var filterLevel = $.cookie('filterLevel'); 
    var filterAge = $.cookie('filterAge'); 
    var filterAttendance = $.cookie('filterAttendance'); 

이름도에 일부 요소의 ID가됩니다 예를 들어 페이지 : <div id="filterDate"></div>

내가 원하는 것은 매우 적은 수의 코드입니다. 가능한 값이 열려 있으면 값이 있는지 확인한 다음 코드를 실행하십시오.

if (filterDate == 'open' || filterArea == 'open' || filterCategory == 'open' || filterType == 'open' || filterLevel == 'open' || filterAge == 'open' || filterAttendance == 'open') { 
    $('#' + filter).find('.menuBox.nav ul').show(); 
    $('#' + filter).find('.menuBox.nav p').hide(); 
    $('#' + filter.find('h3 span').addClass('active'); 
} 

어떻게 위의 쿠키와 패널 당을 복제 할 필요없이 모든 쿠키 filter 작품으로 일을받을 수 있나요?

답변

2

컴팩트 한 솔루션이 될 수있다 :

//The array below allows you to easily add new filters 
var filterNames = ["filterDate", "filterArea", ..., "filterAttendance"]; 
for (var i in filterNames) { 
    var filterName = filterNames[i]; 
    var filterStatus = $.cookie(filterName); 
    if (filterStatus == 'open') { 
     $('#' + filterName).find('.menuBox.nav ul').show(); 
     $('#' + filterName).find('.menuBox.nav p').hide(); 
     $('#' + filterName.find('h3 span').addClass('active'); 
    } 
} 
+0

우수. 정말 좋은 미니멀. 감사. – Cameron

+0

당신을 환영합니다 ;-) – Claudix

0

내가 분명하지 않다 당신이 필터의 이름에 따라 다른 기능을 트리거하기 위해 찾고 있다면. 그렇다면 쿠키에 매핑 된 모든 기능을 저장 한 다음 쿠키의 이름을 반복하여 관련 기능을 실행합니다 (참인 경우). 당신은 단지 하나 개의 함수를 실행하려면

var cookieList = ["filterDate", "filterArea"...]; 
var cookieMap = {"filterDate"=filterDateFn, "filterArea"=filterAreaFn...}; 

for (var i=0; i<numCookies; i++) { 
if ($.cookie(cookieList[i]) == "open") {cookieMap[cookieList[i]]();} 

, 그 시점에서 루프의 휴식, 당신은 cookieMap을 건너 뛸 수 있고, 당신이 원하는 성공 트리거를 실행합니다.

0

쿠키 이름 배열을 만든 다음 개체 (키 맵 : 쌍 값)를 생성합니다. 여기서 키는 배열의 항목이고 값은 적절한 쿠키 값입니다. 그런 다음 루프를 사용하여 배열/객체를 반복합니다.

var filters = ['filterA', 'filterB', 'filterC'], 
    cookies1 = {}, 
    cookies2 = {}; 
for(var i = 0, f; f = filters[i++];) { 
    // really here will be $.cookie(f); instead of 'open': 
    cookies1[f] = cookies2[f] = 'open'; 
} 

// make one of second cookies set 'closed' for testing purpose: 
cookies2['filterA'] = 'closed'; 

function allOpen(cookies) { 
    for(var i in cookies) { 
     if(cookies[i] != 'open') { 
      return false; 
     } 
    } 
    return true; 
} 

alert(allOpen(cookies1) + ', ' + allOpen(cookies2)); 
​