javascript document.getElementById (). значение работает только с числами, а не со строками - PullRequest
1 голос
/ 16 января 2012

У меня есть приложение на основе 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 ]

2 голосов
/ 16 января 2012

Вам нужно заключить строку в кавычки из JavaScript:

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

Числа приводятся к строкам через .toString(), но строки без кавычек приводят к ошибке синтаксического анализатора.

1 голос
/ 16 января 2012

Вы пропускаете кавычки вокруг выражения ERb:

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

(И это также должно быть с JavaScript-экранированием.)

Число - это допустимое выражение JavaScript без кавычек.Произвольные строки не являются;JS попытается проанализировать его как выражение (ссылку) плюс все, что находится в строке, относящейся к JS.

0 голосов
/ 16 января 2012

Код javascript генерируется в виде строки, которая позднее передается интерпретатором javascript.Таким образом ,.если вы генерируете строки, вы должны заключить их в кавычки следующим образом:

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