帮我修复此问题,简单转换为罗马数字代码。有两个输入框,第一个输入数字,第二个框显示结果。和提交按钮
点击转换/提交按钮后,结果不会显示在第二个方框上
js code:
function toRoman(){
var num = document.getElementById('num').value;
var result = "";
var db = { 'M':1000, 'CM':900,'D':500,'CD':400, 'C':100, 'XC':90, 'L':50, 'XL':40, 'X':10, 'IX':9, 'V':5, 'IV':4, 'I':1 };
for(var i in db){
var m = parseInt(num/db[i]);
result = i.repeat(m);
num = num%db[i];
}
return result;
document.getElementById('result').value = result;
}

<body>
<label for="num">Number</label><br/>
<input type="Number" name="num" id="num"><br/><br/>
<label for="result">Result</label><br/>
<textarea id="result" name="result"></textarea><br/><br/>
<input type="submit" id="submit" value="Convert!" onclick="toRoman()">
<script src="toRoman.js"></script>
</body>
&#13;
答案 0 :(得分:1)
您在循环的每次迭代中都会覆盖result
的值而不是添加它。
改为将其更改为result += i.repeat(m);
。
此外,您必须删除return
行,将其移至函数末尾,或以不同方式实现函数 - return
将退出函数该行,意味着您的最后一行(填充结果框)将永远不会执行。
工作示例:
function toRoman() {
var num = +(document.getElementById('num').value);
var result = "";
var db = {
'M': 1000,
'CM': 900,
'D': 500,
'CD': 400,
'C': 100,
'XC': 90,
'L': 50,
'XL': 40,
'X': 10,
'IX': 9,
'V': 5,
'IV': 4,
'I': 1
};
for (var i in db) {
var m = parseInt(num / db[i]);
result += i.repeat(m);
num = num % db[i];
}
document.getElementById('result').value = result;
}
&#13;
<label for="num">Number</label>
<br/>
<input type="Number" name="num" id="num">
<br/>
<br/>
<label for="result">Result</label>
<br/>
<textarea id="result" name="result"></textarea>
<br/>
<br/>
<input type="submit" id="submit" value="Convert!" onclick="toRoman()">
&#13;
还有一条建议......
尝试在代码中查找问题时执行一些基本的调试步骤 - 在函数中抛出一些console.log()
行,以便您知道它正在执行,并且您可以确保价值正在回归你所期望的。
在你的循环中有一个简单的console.log(result)
,我能够看到中间的某个地方,result
确实实际上有一个值,但是到了最后循环,它不再有值。这引出了我的问题&#34;为什么它会在中间而不是在结尾处有一个值,除非我们在每个循环中删除该值?&#34; - 果然,有你的答案。
答案 1 :(得分:0)
只有在完成评论后我才意识到你的问题是什么,在Stack Overflow上提出问题并不是一个好习惯。
无论如何,您的代码没有引用带有id&#39;结果&#39;的元素。你拥有的最后一个语句永远不会被触发,因为它在return语句之后,因此它可能会出现错误,说明代码无法访问&#39;在调试器中。
而不是return result;
你应该有类似的东西:
document.getElementById('result').value = result;
或者,您可以保留您的退货声明,但将此行移至其上方。所以最终的结构将类似于
document.getElementById('result').value = result;
return result;
答案 2 :(得分:0)
变化:
return result;
document.getElementById('result');
到
document.getElementById('result').innerHTML = result;