javascript document.getElementById()。value仅适用于不带字符串的数字

时间:2012-01-15 21:41:30

标签: javascript ruby-on-rails innerhtml getelementbyid

我有一个基于AJAX的应用程序,它根据用户输入更新表单中的文本字段。文本字段定义如下:

<%= form.text_field :queue, {:class => "queue_class", :id => "queue", :size => 40} %>

Javascript代码如下:

document.getElementById('queue').value = <%= @returned_value %>

如果在控制器中,我将@returned_value设置为一个数字,如:

@returned_value='77777777777'

然后工作正常。但是,如果我将其设置为字符串值,如:

@returned_value='abcxyz'

然后它不起作用,文本字段没有更新,我没有得到任何错误信息,它就像它什么都没做。

我也试过这个:

document.getElementById('queue').innerHTML = <%= @returned_value %>

但它不适用于任何返回值,无论是@returned_value='77777777777'还是@returned_value='abcxyz'

有人可以指点我在这里缺少什么吗?

3 个答案:

答案 0 :(得分:2)

您需要引用JavaScript中的字符串:

document.getElementById('queue').innerHTML = '<%= @returned_value %>';

数字通过.toString()强制转换为字符串,但是不带引号的字符串会引发解析器错误。

答案 1 :(得分:1)

您在ERb表达式周围缺少引号:

document.getElementById('queue').value = '<%= @returned_value %>';

(它也应该被JavaScript转义。)

数字是没有引号的合法JavaScript表达式。任意字符串不是; JS将尝试将其解析为表达式(引用)以及与JS相关的字符串中的其他内容。

答案 2 :(得分:0)

javascript代码生成为一个字符串,稍后由javascript解释器传递。从而,。如果你生成字符串,你必须在它周围加上引号:

document.getElementById('queue').value = '<%= @returned_value %>'