2011-10-23 40 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 
    } 

我應該使用超過$。每()以外的東西?

+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,那麼這兩個都將是「真實」的,我認爲該操作的意圖僅適用於一個菜單集爲真,因此爲循環。 –

+0

@Interstellar_Coder調整了代碼以考慮這一點。 – Raynos

0

SH我應該使用除$ .each()之外的其他東西嗎?

我覺得map會更好這裏:

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