2011-10-23 9 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はこれを、ただ1つのナビゲーションアイテムが "アクティブ"なので、ループであるメニューと考えています。 –

答えて

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'になります。つまり、オペレーションの意図は、1つのmenuetだけが真であると考えられます。したがって、ループです。 –

+0

@Interstellar_Coderこれを考慮に入れた調整コード。 – Raynos

0

SHは必要ありません。私は$ .each()以外のものを使用していますか?

私はmapがここで良いだろうと思う:

setMenus: function (selected) { 
    this.menuset = $.map(this.menuset, function(val, key) { return key == selected }) 
} 
関連する問題