无法从命名的javascript函数访问元素

时间:2012-03-31 20:32:18

标签: ruby-on-rails javascript

我有一个javascript函数,如果它是匿名的,可以正常工作,但当我将其更改为named时停止工作..为什么?

这是有效的代码:

setInterval( function(){
<% @root.children.all(:order  => "idx DESC").each do |child| %>
        var text2 =    "<%= child.content %>";
      var pjs = Processing.getInstanceById("mysketch2");
    pjs.update(text2);
    <% end %>

}, 3000)

以下代码不起作用..

<script>
  var interval = setInterval(drawGraph(),1000);
    function drawGraph(){
  <% @root.children.all(:order  => "idx DESC").each do |child| %>
        var text2 =    "<%= child.content %>";
        var pjs = Processing.getInstanceById("mysketch2");
        pjs.update(text2);
      <% end %>

     }

</script>

我得到'未捕获的TypeError:无法调用方法'更新'未定义'。最奇怪的部分是,我可以看到Processing.js窗口正在屏幕上绘制,但就是这样..随着工作版本(这篇文章中的第一个)一切都很好,窗口的内容也被绘制.. < / p>

我尝试将pjs放入drawGraph()函数之外的全局变量中,但没有运气...... 我错过了什么? 谢谢!

2 个答案:

答案 0 :(得分:2)

应该是

setInterval(drawGraph,1000);

不是

setInterval(drawGraph(),1000);

此函数也应在setInterval语句

之前声明

答案 1 :(得分:2)

两段代码不等价:在第一段中,您将向setInterval函数传递对未命名函数的引用。在第二个片段中,您调用drawGraph(),然后将结果值传递给setInterval。

尝试:

var interval = setInterval(drawGraph, 1000);

并在调用setInterval之前移动drawGraph的定义。