首先,谢谢大家对我之前的问题的帮助。我让我的代码完全按照我的意愿完成了你的帮助。但现在它也在做一些我不想做的事情。
function raceMod() {
var race = document.getElementById("race").value;
var str = document.getElementById("strScore").value;
if (race == "orc") {
var orc = {
str: 4,
dex: 0,
con: 0,
int: -2,
wis: -2,
cha: -2
}
document.getElementById("strScore").value = (parseInt(str) + parseInt(orc.str))
} else if (race == "ore") {
var ore = {
str: 2,
dex: 0,
con: 0,
int: 0,
wis: 2,
cha: -2
};
document.getElementById("strScore").value = (parseInt(str) + parseInt(ore.str))
}
}
这是我的javascript。我有一个可供选择的潜在比赛的下拉菜单。根据所选择的种族,创建了影响与该变量对应的文本输入的不同变量。
现在,用户在文本输入中输入一个数字,然后选择一个种族。根据所选的比赛,在用户已输入的数字中添加或减去修饰符。
我遇到的问题是即使已经修改了脚本,脚本也会继续添加到输入中。
例如,如果用户在输入中键入“10”并选择Orc,则10变为14.但是如果他选择了Oread(“ore”),则输入变为16.我需要更改从本质上讲,我需要javascript忽略新数字,只将变量添加到原始输入。
有没有这样做?
答案 0 :(得分:0)
您可以做的是捕获strScore
输入中用户的输入,并保存该值。
当race
更改时重新计算得分时,请使用用户输入的值,而不是strScore
输入中的值。由于更改strScore
时race
值会不断变化。
这里是代码摘要(不完整,请参阅小提琴)
// the score the user filled in, defaults null
var userScore = 0;
// when the user inputs a score, save it
score.addEventListener('input', function(e) {
userScore = e.target.value;
});
function raceMod() {
// we only need the race value here
var race = raceSelector.value;
if (race == "orc") {
var orc = {
str: 4,
dex: 0,
con: 0,
int: -2,
wis: -2,
cha: -2
};
// this is edited
// use the value of `userScore`, not the value from the input
score.value = (parseInt(userScore, 10) + parseInt(orc.str, 10));
} else if (race == "ore") {
var ore = {
str: 2,
dex: 0,
con: 0,
int: 0,
wis: 2,
cha: -2
};
// same as above
score.value = (parseInt(userScore, 10) + parseInt(ore.str, 10));
}
}