2013-09-02 3 views
0

творит систему магазина для моего HTML игры, и я хочу сделать так, чтобы при нажатии на элементе, он получает идентификатор и снижает переменный для этого элемента 1.Как настроить переменную на основе идентификатора объекта, который нажал?

if(e.shiftKey && inShop[this.id] === 0) { 
    coins = coins+price[this.id] 
    coinUpdate(); 
    [this.id]--;  
} 

var fish1 = 1 
<html> 
    <img class="item cookable" id="fish1" src="source"> 
</html> 

Например, когда я нажимаю на рыбу, я хочу, чтобы она уменьшала переменную для количества рыб, которые у вас есть в вашем инвентаре. Поэтому мне нужно изменить [this.id] на переменную с тем же именем.

+0

Вы могли бы предоставить [скрипку] (http://jsfiddle.net) –

ответ

1

Не используйте метод window. Он работает только с переменными global.

Глобальные переменные определяются как some_var = 10;, а не var some_var = 10; Если вы работаете на фоне программирования на рабочем столе, вы обнаружите, что глобальные переменные в JS hella неудобны.

Вместо этого используйте пространства имен или объект (этот метод).

Определите свой инвентарь, как это:

var inventory = { 
    goldfish: 10, 
    seahorse: 10, 
    jellyfish: 10 
} 

Как для HTML, метод ID в порядке, но почему бы не использовать атрибут data? Это сделано для того, чтобы держать метаданные настолько совершенными для этого сценария.

<img src="//placehold.it/32x32" class="item cookable" data-type="fish"> 

Доступ для этого встроен в jQuery через.Метод данных так, когда вам нужно уменьшать или увеличивать количество основано на том, что нажата, просто используйте следующую команду, где необходимо:

// Fetch the "type" of fish from the data attribute 
var type = $(this).data("type"); 

// And update the inventory 
inventory[type]--; 

Используйте атрибут data для других метаданных так data-foo="hello" data-bar="world"

И они могут быть извлечена как объект, использующий jQuery .data(), и он вернет {foo: "hello", bar: "world"} or fetch them individually by passing the data name .data ("foo") `

Лично я использовал бы это вместо ID.

+0

Но в чем разница между типом данных и идентификатором? –

+0

Вы можете использовать идентификатор, если хотите, существует разница между двумя тем, что атрибут 'data-' создан специально для хранения метаданных о чем-то. Прочтите эту страницу для лучшего описания: http://ejohn.org/blog/html-5-data-attributes/ – ninty9notout

1

Все глобальные переменные в JS создаются на объекте окна. Если у вас есть переменная на один идентификатор, вам просто нужно сделать window[this.id]-- или window[this.id]++. Во всяком случае, в JavaScript объект Window действует как глобальное пространство имен и, вообще, это плохая практика загромождать глобальное пространство имен переменными. Вы должны создать новый объект (например, items), содержащий все счетчики и запись для каждого элемента, который добавляется вы можете сделать items[this.id]++ или items[this.id]--, когда они удаляются

+0

О да, это умно, спасибо большое! –

+0

_Все переменные в JS создаются на объекте window._ Это ** не ** true. Только переменные, объявленные вне любых функций, добавляют к глобальному объекту как свойства. –

1

[this.id]-- не будут работать. Это делает массив с одним элементом (строка, на которую ссылается this.id), и пытается уменьшить этот массив. И декремент массива не имеет большого смысла.

Вы не можете получить доступ к локальной переменной динамически, как это (ну, в некоторых случаях вы можете, но на самом деле вы не должны). Тем не менее, вы можете делать это со свойствами, поэтому вам нужно немного перефразировать вещи.

Как насчет хранения всех предметов, которые у вас есть в объекте, возможно, назовите его inventory.

var inventory = { 
    fish1: 10, 
    fish2: 5, 
    worms: 3 
}; 

Теперь вы используете вы уменьшаете метод только с небольшой подстройкой:

if(e.shiftKey && inShop[this.id] === 0) { 
    coins = coins+price[this.id] 
    coinUpdate(); 
    inventory[this.id]--; // decrement an item count in your inventory 
} 
+0

Спасибо, я меняю это на это сейчас, я дам вам знать, если это сработало –

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