我会再次尝试这个问题,因为显然是我最后一次提出这个问题,我没有做得很好......再来一次:
我有一些代码,它从Web表单中获取参数,并且根据输入参数应该在textarea中显示文本。
设置$ defMessage变量的if语句正常运行,但无论输入变量值是什么,textarea中的默认文本都不会更改为存储在$ defMessage中的实际值。
有人能说出为什么会发生这种情况吗?
my $defMessage = undef;
$defMessage = 'CONCAT 1';
if ($templateLength =~ SEND_OPTIONS_CONCAT_1) {
$defMessage = 'CONCAT 1';
} elsif ($templateLength =~ SEND_OPTIONS_CONCAT_2) {
$defMessage = 'CONCAT 2';
} elsif ($templateLength =~ SEND_OPTIONS_CONCAT_3) {
$defMessage = 'CONCAT 3';
}
print $q->start_form(
-name=>'main',
-method=>'POST',
);
print $q->start_table(
{-align=>'center', -border=>1}
);
print $q->Tr(
$q->td(
{-align=>'center'},
'Message<br>'.$q->textarea(
-name=>'sendMessage',
-size=>15,
-rows=>10,
-columns=>15,
-value=>$defMessage,
),
),
);
我尝试过更改
my $defMessage = undef;
到
use vars qw($defMessage);
但这也不起作用......
答案 0 :(得分:4)
如果您正在处理的请求提供了field_name参数,则CGI将使用该值而不是您提供的默认值,除非您使用-override=>1
调用textarea或明确更改参数($q->param('field_name',$defMessage)
)在致电textarea之前。
这不是特定于textarea; 所有 CGI的表单输入方法都是这样工作的。
答案 1 :(得分:0)
文本区域项与HTML中的其他控件不同,因为未使用value属性。相反,项目的内容是重要的。这显示在略有不同的界面中。 CGI文档(请参阅:http://search.cpan.org/dist/CGI/lib/CGI.pm#CREATING_A_BIG_TEXT_FIELD)显示默认值使用的密钥是-default
,而不是-value
。
所以,试试:
'Message<br>'.$q->textarea(
-name=>'sendMessage',
# -size=>15, # Deleted, doesn't apply to textarea controls
-rows=>10,
-columns=>15,
-default=>$defMessage, # Amended line
),