javascript帮助我修复我的第一手代码

时间:2017-07-05 13:43:00

标签: javascript html

帮我修复此问题,简单转换为罗马数字代码。有两个输入框,第一个输入数字,第二个框显示结果。和提交按钮

点击转换/提交按钮

后,

结果不会显示在第二个方框上

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;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

您在循环的每次迭代中都会覆盖result的值而不是添加它。

改为将其更改为result += i.repeat(m);

此外,您必须删除return行,将其移至函数末尾,或以不同方式实现函数 - return将退出函数该行,意味着您的最后一行(填充结果框)将永远不会执行。

工作示例:

&#13;
&#13;
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;
&#13;
&#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;