2011-10-23 4 views
0

내가 뭘 잘못하고 있니?

var menu = { 
    menuset : { 
     first : false, 
     second : false, 
     third : false 
    }, 
    setMenus : function (selected) { 

     var menuCollection = this.menuset; 

     $.each(menuCollection, function (key, element) { 
      if (selected===key) { 
       key=true; 
      } else { 
       key=false; 
      } 
     }); 
    } 
} 

내가 실행

"menu.setMenus (첫번째)"나는이 같은 개체를 설정하려면 :

menuset : { 
     first : true, 
     second : false, 
     third : false 
    } 

내가 $ .each() 이외의 것을 사용되어야한다 ??

+0

이 경우에 각을 사용해야하는 이유를 이해하지 않습니다. setMenus 함수는 다음과 같을 수 있습니다 : this.menuset [selected] = true; (당신이 Jayendra에 의해 제안 된 모든 수정을했다고 가정) –

+0

Luiz는 이것을 하나의 네비게이션 아이템이 "활성화"된 루프로 간주하는 메뉴라고 생각합니다. –

답변

2

시도 -

var menu = { 
    menuset : { 
     'first' : false, 
     'second' : false, 
     'third' : false 
    }, 
    setMenus : function (selected) { 

     var menuCollection = this.menuset; 

     $.each(menuCollection, function (key, element) { 
      if (selected === key) { 
       menuCollection[key] = true; 
      } else { 
       menuCollection[key] = false; 
      } 
     }); 
    } 
} 

menu.setMenus('first'); 

데모 - http://jsfiddle.net/nu9v2/

1

몇 가지 :

  1. first는 this.menuset의 속성입니다,하지만 당신은 단지 first로 전달된다.
  2. $.each의 콜백 fn에 대한 첫 번째 인수는 정수 인덱스이지만 은 부울로 전달됩니다.
1

필요하지 않은 jQuery를

var menu = { 
    menuset : { 
     'first' : false, 
     'second' : false, 
     'third' : false 
    }, 
    setMenus : function (selected) { 
     // set other values to false 
     var keys = Object.keys(this.menuset); 
     for (var i = 0, len = keys.length; i < len; i++) { 
      this.menuset[keys[i]] = false; 
     } 
     // set correct value to true 
     this.menuset[selected] = true; 
    } 
} 

Example

+0

하지만 다른 메뉴 세트를 true로 설정하면 둘 다 'true'가 될 것이므로 op의 의도는 하나의 메뉴 세트 만이 사실이므로 루프라고 생각합니다. –

+0

@Interstellar_Coder는 이것을 고려한 조정 코드입니다. – Raynos

0

쉬 ould 나는 $ .each() 이외의 것을 사용하고 있습니까?

나는 map 여기에 더 좋을 것이라고 생각 :

setMenus: function (selected) { 
    this.menuset = $.map(this.menuset, function(val, key) { return key == selected }) 
} 
관련 문제