1

对不起,我不能再具体了——我不知道问题出在哪里。我是一个完全的初学者,我已经添加了我所知道的所有内容以添加到编码中,但是当我按下按钮时没有任何反应。目前我不知道这是编码中的错误,还是导致它无法工作的语法错误。

基本上,我试图让这个函数“Rip It”通过杜威十进制数字列表,更改其中一些,并返回新数字和一条消息,说明它已被更改。还有一个标有“无编号”的必须返回错误(不一定是警告框,在同一空间中的消息是可以的。)

我是一个初学者,不是特别擅长这个东西,所以请温柔!非常感谢!

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function RipIt()
{
for (var i = l; i <=10 i=i+l)
{
var dewey=document.getElementById(i);
dewey=parseFloat(dewey);

if (dewey >= 100 && 200 >= dewey)
    {
    document.getElementById('dewey'+ 100)
    }
else if (dewey >= 400 && 500 >= dewey)
    {
    document.getElementById('dewey'+ 200)
    }
else if (dewey >= 850 && 900 >= dewey)
    {
    document.getElementById('dewey'-100)
    }
else if (dewey >= 600 && 650 >= dewey)
    {
    document.getElementById('dewey'+17)
    }
}
}
</script>       
</head> 
<body>

<h4>Records to Change</h4>
<ul id="myList">
  <li id ="1">101.33</li>
  <li id = "2">600.01</li>
  <li id = "3">001.11</li>
<li id = "4">050.02</li>
  <li id = "5">199.52</li>
  <li id = "6">400.27</li>
<li id = "7">401.73</li>
  <li id = "8">404.98</li>
  <li id = "9">no number</li>
<li id = "10">850.68</li>
  <li id = "11">853.88</li>
  <li id = "12">407.8</li>
  <li id = "13">878.22</li>
  <li id = "14">175.93</li>
  <li id = "15">175.9</li>
<li id = "16">176.11</li>
  <li id = "17">190.97</li>
  <li id = "18">90.01</li>
<li id = "19">191.001</li>
  <li id = "20">600.95</li>
  <li id = "21">602.81</li>
<li id = "22">604.14</li>
  <li id = "23">701.31</li>
  <li id = "24">606.44</li>
  <li id = "25">141.77</li>

</ul>
<b> </b>
<input type="button" value="Click To Run" onclick="RipIt()">
<!-- <input type="button" value="Click Here" onClick="showAlert();"> -->

</body>
</html>
4

2 回答 2

2

我看到几个问题:

  1. 您需要确保idHTML 中的值与您实际输入的值相匹配getElementById。例如,您有document.getElementById('dewey'+ 100)which 将查找具有idvalue的元素"dewey100",但我在您的标记中看不到任何具有该id值的元素。

  2. l您似乎输入了您要输入数字的小写字母1(在您的for循环中)。

  3. 这段代码:

    var dewey=document.getElementById(i);
    dewey=parseFloat(dewey);
    

    ...使用idfrom检索元素i(到目前为止一切都很好),但随后尝试将元素解析为浮点数。DOM 元素是对象,将它们传入parseFloat不会做任何有用的事情。:-) 在这种情况下,如果您尝试解析元素的内容,您可以通过innerHTML属性或(在大多数浏览器上)innerText仅获取文本。所以也许:

    var dewey=document.getElementById(i);
    dewey=parseFloat(dewey.innerHTML);
    
  4. 线

    document.getElementById('dewey'+ 100)

...本身就是一个“什么都不做”的行:它查找元素,但随后不做任何事情。我建议进行更改,但我不知道您要如何处理该元素。:-)


您可能不知道它(是新的),但您的浏览器几乎可以肯定有一个非常强大的工具,称为“调试器”。查看菜单,但在大多数浏览器中,您可以使用 F12 键访问“开发工具”。然后您转到结果窗口中的“源”或“代码”选项卡,这将显示您的代码。如果您单击一行的左侧,在大多数设置断点的调试器中,该断点将在该点停止其轨道中的代码,以便您可以看到发生了什么。花一些时间学习使用该工具是值得的,这样您就可以实际观察您的代码运行。

于 2013-10-24T15:39:24.070 回答
1

Editing my old answer...

For your HTML, I removed the id's in the list items since you can find a better way to iterate through them. This way you don't have to add a new id when you want to add an li. See below:

<h4>Records to Change</h4>

<ul id="myList">
    <li>101.33</li>
    <li>600.01</li>
    <li>001.11</li>
    <li>050.02</li>
    <li>199.52</li>
    <li>400.27</li>
    <li>401.73</li>
    <li>404.98</li>
    <li>no number</li>
    <li>850.68</li>
    <li>853.88</li>
    <li>407.8</li>
    <li>878.22</li>
    <li>175.93</li>
    <li>175.9</li>
    <li>176.11</li>
    <li>190.97</li>
    <li>90.01</li>
    <li>191.001</li>
    <li>600.95</li>
    <li>602.81</li>
    <li>604.14</li>
    <li>701.31</li>
    <li>606.44</li>
    <li>141.77</li>
</ul>

<input type="button" value="Click To Run" onclick="RipIt()">

For your javascript, I found the number of li's and stored in children. Then found the length of this array and set to 'length'. Then I pulled the innerHTML from each child item in the children array and parseFloat'ed it. Then I ran your conditional and created a new value based on the child's value.

Finally that value is stored in the children li item in question.

the JavaScript:

function RipIt() {
   var children = document.getElementById("myList").getElementsByTagName("li"),
       length = children.length;

  for (var i = 0; i < length; i++) {

    var child = children[i].innerHTML,
        newValue;
    child = parseFloat(child);

    if (child >= 100 && 200 >= child) {
      newValue = child + 100;
    } else if (child >= 400 && 500 >= child) {
      newValue = child + 200;
    } else if (child >= 850 && 900 >= child) {
      newValue = child - 100;
    } else if (child >= 600 && 650 >= child) {
      newValue = child + 17;
    }

     children[i].innerHTML = newValue;

  }

}

You will probably need to work on your conditionals (if/else) to get exactly what you want. You didn't really specify what each condition needed to do in your answer so I just used your original code.

于 2013-10-24T15:50:41.803 回答