2016-04-22 5 views
0

проблема я хочу, чтобы сократить свой код, вызывая переменную, используя значение другой переменнойПрисвоить значение переменной в качестве имени переменной

долго рабочая версия:

var russia = new Array('15') 
var switzerland = new Array('5') 

$('.country').mouseover(function(){ 
    switch(this.id){ 
     case 'russia': 
      active_country_lift(this.id,russia[0]) 
     break 
     case 'switzerland': 
      active_country_lift(this.id,switzerland[0]) 
     break   
    } 
}) 

он получит идентификатор mouseovered затем проверить если она соответствует одной переменной с помощью переключателя

то, что я хочу, чтобы получить что-то вроде этого:

var russia = new Array('15') 
var switzerland = new Array('5') 

$('.country').mouseover(function(){ 
    active_country_lift(this.id,this.id[0])  
}) 

Конечно, вышеуказанный код не работает, но есть ли обходной путь для этого?

UPDATE: ответ Arun работал и плохо принять его в ближайшее время, и, как и для комментариев, запрашивающих полный код, вот кусок из него после того, как я применил Аруна

var countries = { 
    russia: ['-15px'], 
    switzerland: ['-5px'] 
} 

$('.country_inactive').mouseover(function(){ 
    active_country_lift(this.id, countries[this.id][0]) 
}) 

function active_country_lift(country, country_top){ 
    if(!$('#'+country+'_active').hasClass('active')){ 
     $('#'+country+'_active').stop().fadeIn(100).animate({ 
      'top' : country_top 
     }, 200) 
     $('#'+country).stop().fadeOut(100) 
    } 
} 

он будет использоваться для карты мира, не стесняйтесь делать какие-либо предложения для делая его более динамичным

+3

Pro совет: никогда не используйте 'новый Array' в JS, если вы не объявляете длину из массив. Просто инициализируйте массив, используя '[]'. –

+0

Можете ли вы добавить полный код того, чего вы пытаетесь достичь, это, вероятно, может быть достигнуто только с помощью CSS. – Tushar

+0

Возможный дубликат [Получить глобальную переменную динамически по строке имени в JavaScript] (http://stackoverflow.com/questions/1920867/get-global-variable-dynamically-by-name-string-in-javascript) – 4castle

ответ

4

Вы можете хранить информацию в стране в объекте, как ключевой пары значений, а затем использовать bracket notation, чтобы получить доступ к динамически

var countries = { 
    russia: new Array('-15px'), 
    switzerland: new Array('-5px') 
} 

$('.country').mouseover(function() { 
    active_country_lift(this.id, countries[this.id][0]) 
}) 

Если вы не имеете несколько значений, то

var countries = { 
    russia: '-15px', 
    switzerland: '-5px' 
} 

$('.country').mouseover(function() { 
    active_country_lift(this.id, countries[this.id]) 
}) 
+0

'new Array ('-15px') '==>' '-15px''. Зачем использовать массив. – Tushar

+0

@Tushar на самом деле дает '['-15px']' –

+0

@Tushar может быть несколько значений, не уверены в этом –

0

попробуйте использовать eval() функцию

var russia = new Array('-15px') 
var switzerland = new Array('-5px') 

$('.country').mouseover(function(){ 
    active_country_lift(this.id,eval(this.id)[0])  
}) 
+1

Большинство людей произносят 'eval' как« злые », потому что это зло и неэффективно. Однако это правильный ответ. – 4castle

Смежные вопросы