2014-01-09 109 views
1

我是JavaScript新手,我试图在html中创建一个脚本,该脚本创建一个变量x,然后将它写入表格中的单元格。这是我想到的,但它不起作用。Javascript功能不工作+ var

<table border="1"> 
    <tr> 
     <td>Text</td> 
     <td id="xx"></td> 
     <td><button type="button" onclick="x()">Check</button></td> 
    </tr> 
</table> 

<script> 
    function x() { 
     var x = idec.device_read("D", 0901, 0, 0); 
    } 
    document.getElementById("xx").innerHTML = x; 
</script> 

想法是,当您单击按钮时,可以在单元格中查看var x的结果。但是,因为它没有工作,我说就在上面

下面的脚本

var y = 5; 

然后我说

<p> 
    <script> 
     document.write(x + "<br>"); 
     document.write(y); 
    </script> 
</p> 

这在理论上应该至少增加五在桌子后面...或者没有?因为没有出现5 ...问题的

部分可能是因为我已经得到了

var x = idec.device_read("D", 0901, 0, 0); 

部分错了,因为我没有正确检验的方式。

+3

首先,不要让你的函数名相同的变量名,因为函数名实际上是变量。所以没有函数x(),然后一个var x = – CRABOLO

+0

好的建议,虽然这不是问题的原因,因为变量x是在函数x的范围内定义的......但它看起来像是在这种情况下比智慧更幸运。 – kander

+0

我只是把x输入到这里的时候 - 他们有其他的名字... –

回答

1

您正在将内容写入函数外部的表格单元格,使其在页面加载时立即运行。那时变量x还没有被声明,所以它不会做任何事情。然后当点击按钮时,所发生的只是一个变量x被填充了,但是没有做任何事情。

function x() { 
    var x = idec.device_read("D", 0901, 0, 0); 
    document.getElementById("xx").innerHTML = x; 
} 

我不知道是什么idec.device_read()是应该做的,所以我不能就是否就是问题的一部分发表评论。不过,我建议通过用固定值替换该函数调用来分解较小部分的问题。如果您可以写入表格单元格,则可以将该代码添加回来,以解决从设备读取值的问题。分而治之:

function x() { 
    var x = 'test'; 
    document.getElementById("xx").innerHTML = x; 
} 

正如AlienArrays在评论中指出:在变量相同的命名你的职责是在Javascript中做危险的事情:

function writeDeviceValueToCell() { 
    var deviceValue = 'test'; 
    document.getElementById("xx").innerHTML = deviceValue; 
} 

投递客户端相关的问题请考虑将您的代码添加到JS小提琴。这样,有兴趣的人可以更容易地看到你想要做的事情。我创建了一个捣鼓这个问题来证明:http://jsfiddle.net/5gESD/

+0

那么我怎样才能改变你指定给idec的“固定值”呢? –

+0

反转我所做的,将idec.device_read()回调粘贴到我建议的“测试”值上。 – kander

+0

所以我使用你的第三套代码,并用我的代码替换测试?有或没有''? –

0

试试这个

​​

变量xfunction x所以内部作用域当您设置innerHTMLx范围function x

所以首先更改函数名称并设置函数内的值。

这里是样品仓链接http://jsbin.com/ANUBeXox/1/

+0

其实,变量是在函数内声明的,所以它们不在同一范围内...... – kander

+0

是的,你错过了。 –