【问题标题】:javascript document.getElementById().value works only with numbers not with stringsjavascript document.getElementById().value 仅适用于数字而不适用于字符串
【发布时间】:2012-01-15 21:41:29
【问题描述】:

我有一个基于 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'

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

【问题讨论】:

    标签: javascript ruby-on-rails innerhtml getelementbyid


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      (它也应该是 JavaScript 转义的。)

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

      【讨论】:

      • 谢谢戴夫,你拯救了我的一天!
      • @rh4games 没问题。只需确保 JS 转义它以避免其他问题。
      • 对不起,戴夫,如何“JS-escape”?
      • @rh4games 与escape_javascript (docs).
      【解决方案3】:

      javascript 代码生成为字符串,稍后由 javascript 解释器解析。因此,。如果你生成字符串,你必须像这样在它周围加上引号:

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

      【讨论】:

      • 感谢 Holger,解决了我的问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2014-07-13
      • 2019-03-06
      • 2017-01-06
      • 1970-01-01
      相关资源
      最近更新 更多