基于 javascript 的技能计算器在 Firefox 中不起作用

标签 javascript

<分区>

我对 JavaScript 还很陌生,只是真正研究了它在基于网络的技能计算器中的用途。 我遇到了一个示例并根据我的需要对其进行了调整,但是在几个不同的浏览器中对其进行测试时,我注意到在 Firefox 中,单击按钮时计数器不会上升或下降,单击 10 次后我仍然收到消息“你已经达到最大值出那个技能!”再次右键单击 10 次会给我消息“你已经用完了那个技能!”正如我所料,但计数器本身并没有改变。

是否有一个简单的修复方法可以让这个在 Firefox 中正常工作,还是我应该走另一条路?

CSS:

.skillbutton {
  background:url() no-repeat;
  cursor:pointer;
  width: 250px;
  height: 12px;
  border: none;
  color: transparent;
}

#skill1counter {
  margin-left: auto ;
  margin-right: auto ;
  font-size:0.6em;
}

#skill1 {
  width: 250px ;
  height: 12px ;
  margin-left: auto ;
  margin-right: auto ;
  background-image:url(images/skill/skill1.png);
  background-repeat:no-repeat;
}

HTML:

<div id='skill1'>
<input type="button" class="skillbutton" onclick="SkillManager.increase('skill1')" oncontextmenu="SkillManager.decrease('skill1'); return false;" value="S1" />
</div>
<div id='skill1counter' style="font-weight: bold">0</div>

脚本:

<script type="text/javascript">

var SkillManager = (function() {
var max = 50,
    skills = {
        skill1: {
            cur: 0,
            max: 10
        },
        skill2: {
            cur: 0,
            max: 10
        },
        skill3: {
            cur: 0,
            max: 10
        }
    },
    totalUsed = 0;

var increase = function(skill) {
    if (totalUsed < max && skills[skill].cur < skills[skill].max) {
        skills[skill].cur++;
        totalUsed++;
        updateDisplay(skill, skills[skill].cur, max - totalUsed);
    } else if(skills[skill].cur === skills[skill].max) {
        alert("You have maxed out that skill!");
    } else {
        alert("You have used all your skill points!");
    }
};

var decrease = function(skill) {
    if (skills[skill].cur > 0) {
        skills[skill].cur--;
        totalUsed--;
        updateDisplay(skill, skills[skill].cur, max - totalUsed);
    } else {
        alert("You can't decrease a skill with 0 points in it!");
    }
};

var updateDisplay = function(skill, value, totalRemaining) {
    document.getElementById(skill + "counter").innerText = value;
    document.getElementById("remainingPoints").innerText = totalRemaining;
};

return {
    decrease: decrease,
    increase: increase
};
}());

</script>

另外,作为一个附带问题,我将如何添加一个 if 语句来表示“如果技能 1 = 小于 10,则不能增加技能 2”或者要增加技能 2,技能 1 必须为 10?

最佳答案

首先,您的 HTML 中缺少元素 remainingPoints

<div id='remainingPoints'></div>

其次,在 firefox 中,将 innerText 替换为 textContent,它应该可以正常工作,如所述 here :

var updateDisplay = function(skill, value, totalRemaining) {
    if(document.all){
        document.getElementById(skill + "counter").innerText = value;
        document.getElementById("remainingPoints").innerText = totalRemaining;
    } else {
        document.getElementById(skill + "counter").textContent = value;
        document.getElementById("remainingPoints").textContent = totalRemaining;
    }

};

fiddle here .

关于基于 javascript 的技能计算器在 Firefox 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14128317/

相关文章:

javascript - 用于平移和旋转的 WebGl 位置

javascript - CSS animationend EventListener 反复触发

javascript - JS 打印问题

javascript - 在 mouseleave 事件上关闭 daterangepicker

javascript - 如何使用 JQuery append()、add() 或 appendTo() 将对象附加到 DOM 元素?

javascript - 无法单击具有多个选项的元素

javascript - 通过首先存储在变量中然后正确格式化来将代码字符串添加到我的 html 中?

php - 加密 Ajax 数据的最佳且最安全的方法是什么?

javascript - 在 D3.js 中使用 vanilla JS 选择器

javascript - Internet Explorer 8 兼容模式下的 YouTube api 错误