0

看:

-工作示例-

如何复制我的*问题:

如果您将所有奖励积分放入除 1 之外的统计数据中,然后在另一个统计数据中按 CTRL-CLICK,则奖励值将变为负数,此时*它应该停止在 0 处

控制:

  • 左键单击 = 分配 1 个点
  • CTRL 左键单击 = 分配 5 个点
  • 右键单击 = 收回 1 分
  • CTRL 右键单击​​ = 收回 5 点

JavaScript:

var Alexander =
    {
      Magic: "MagicVal",
      Attack: "AttackVal",
      Bonus: "BonusVal",
      Limits: {
        Magic:  {
          max: 100,
          min: 80
        },
        Attack: {
          max: 100,
          min: 80
        }
        }
    };

function table(e)
{
  e.preventDefault();
}

function add(character, stat) //Allocates "1" with left-click//
{
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) + 1;
  if(newNumber > character.Limits[stat].max) return;
  var BonusVal = document.getElementById(character.Bonus);
  if(BonusVal.value <= 0) return;
  var newBonus = parseInt(BonusVal.value) - 1;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}

function subtract(character, stat) //Takes back "1" with right-click//
{
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) - 1;
  if(newNumber < character.Limits[stat].min) return;
  var BonusVal = document.getElementById(character.Bonus);
  var newBonus = parseInt(BonusVal.value) + 1;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}

function dump(e, character, stat) //Allocates "5" with CTRL+left-click//
{
  if (e.ctrlKey == 1 && e.which == 1) {
  console.log('met');
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) + 4;
  if(newNumber > character.Limits[stat].max) return;
  var BonusVal = document.getElementById(character.Bonus);
  if(BonusVal.value <= 0) return;
  var newBonus = parseInt(BonusVal.value) - 4;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}
}

function reclaim(e, character, stat) //Takes back "5" with CTRL+right-click//
{
  if (e.ctrlKey == 1 && e.which == 3) {
  console.log('met');
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) - 4;
  if(newNumber < character.Limits[stat].min) return;
    var BonusVal = document.getElementById(character.Bonus);
  var newBonus = parseInt(BonusVal.value) + 4;
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}
}
4

3 回答 3

3

您似乎正在检查 Bonus 的现有值,然后再对其进行任何调整。因此,如果奖金是 1 并且您试图从中删除 5,则检查将显示值为 1 并继续进行数学运算以将值更改为 -4。

我的猜测是你会想要应用数学,然后检查 0,如果值 < 0,则调整为 0。

于 2013-11-13T16:56:56.940 回答
3

你必须替换(在你的dump方法中)这个

  if(BonusVal.value <= 0) return;
  var newBonus = parseInt(BonusVal.value) - 4;

有了这个 :

  var newBonus = parseInt(BonusVal.value) - 4;
  if(newBonus <= 0) return;
于 2013-11-13T16:59:39.653 回答
2

工作示例!...

http://jsbin.com/omigOti/1/edit

您需要验证奖金是否为负数......就像这个更正......

function add(character, stat) //Allocates "1" with left-click//
{
  var txtNumber = document.getElementById(character[stat]);
  var newNumber = parseInt(txtNumber.value) + 1;
  if(newNumber > character.Limits[stat].max) return;
  var BonusVal = document.getElementById(character.Bonus);
  if(BonusVal.value <= 0) return;
  var newBonus = parseInt(BonusVal.value) - 1;
  if( newBonus < 0 ){ //try if is negative

    newBonus = 0; //and fix it
    newNumber = +(BonusVal.value);

  } 
  BonusVal.value = newBonus; 
  txtNumber.value = newNumber;
}

function dump(e, character, stat) //Allocates "5" with CTRL+right-click//
{
  if (e.ctrlKey == 1 && e.which == 1) {
    debugger;
    console.log('met');
    var txtNumber = document.getElementById(character[stat]);
    var newNumber = parseInt(txtNumber.value) + 4;
    if(newNumber > character.Limits[stat].max) return;
    var BonusVal = document.getElementById(character.Bonus);
    if(BonusVal.value <= 0) return;
    var newBonus = parseInt(BonusVal.value) - 4;
    if( newBonus < 0 ){ //try if is negative

      newBonus = 0; //and fix it
      newNumber = +(BonusVal.value);

    } 
    BonusVal.value = newBonus; 
    txtNumber.value = newNumber;
  }
}
于 2013-11-13T17:03:51.740 回答