2015-04-23 6 views
-3

Мне нужно передать переменную Perl функции JavaScript.Передача переменной Perl функции JavaScript

print "<input type='radio' name='envelopeid' value='$values[0]' onclick='SetName(this.value,$values[1]);'>"; 

где значения является массив переменных в Perl и SetName (а, б) это функция JavaScript.

приведенная выше функция JavaScript работает отлично, когда я передаю один аргумент i.e SetName (this.value), но это не сработает, если я передаю 2 аргумента. (Я изменил функцию JavaScript, чтобы принять 2 аргумента соответственно)

Вышеупомянутая функция не инициирована onclick, а вызывает ошибку в строке состояния браузера.

Что нужно изменить, чтобы передать переменную $ Perl $ values ​​[1] функции JavaScript?

+0

Каков точный текст ошибки, который вы получаете? Также, пожалуйста, покажите определение функции «SetName». – ThisSuitIsBlackNot

+0

«Синтаксическая ошибка» - это единственное сообщение об ошибке, отображаемое в браузере. , и я уверен, что это сообщение об ошибке генерируется из-за $ values ​​[1] при передаче функции JavaScript в качестве аргумента. может ли переменная Perl быть передана функции JavaScript каким-либо другим способом? – Babu

+0

Опять же, пожалуйста, отредактируйте свой вопрос, чтобы показать определение функции «SetName». Также добавьте 'use Data :: Dumper; предупредить Dumper \ @values; 'к вашему скрипту Perl непосредственно над линией' print', которую вы показали, и запустить CGI из командной строки. Это покажет, что содержит массив '@ values'; отредактируйте вывод предупреждения в свой вопрос. – ThisSuitIsBlackNot

ответ

1

Что вы на самом деле пытаетесь сделать, это передать значение из $values[0] и $values[1].

Чтобы передать значение функции JS, она должна быть создана литералом JS. JSON является подмножеством JS, поэтому для создания этого литерала можно использовать кодер JSON.

use JSON::XS qw(); 
my $json = JSON::XS->new->allow_nonref; 
my $val1_jslit = $json->encode($values[1]); 

JS и $values[0] должны быть встроены в HTML, так что вам нужно кодировать соответствующим образом.

use HTML::Entities qw(encode_entities); 
my $val0_html  = encode_entities($values[0]); 
my $val1_jslit_html = encode_entities($val1_jslit); 

Затем вы можете легко интерполировать.

print "<input ... value='$val0_html' onclick='SetName(this.value, $val1_jslit_html);'>";