2014-11-05 1 views
0

Я использую следующий Perl-код для создания всплывающего меню HTML с CGI.pm:Как добавить пользовательский атрибут в popup_menu с помощью CGI.pm?

$html->popup_menu(
    -name  => "to", 
    -values => [@TO, $param_to], 
    -labels => {%TO, $param_to => $param_to,}, 
    -default => $param_to, 
    -onchange => $onchange, 
    -class => "form-control" 
); 

Сформированное меню выглядит следующим образом:

<select name="to" onchange="if (this.value=='[email protected]' || document.theForm.supportform.value==1) document.theForm.submit();" class="form-control"> 
 
<option value=""> select recipient </option> 
 
<option value="[email protected]">Sales Inquiry</option> 
 
<option value="[email protected]">Technical Support</option> 
 
<option value="[email protected]">Jobs @ abc</option> 
 
<option value="[email protected]">Investor Relations</option> 
 
<option value="[email protected]">abc Webmaster</option> 
 
</select>

Как я могу добавить атрибут required до <select> элемент?

+0

Ничего себе для редактирования, @ThisSuitisBlackNot –

+2

Пожалуйста, не используйте методы генерации HTML в CGI.pm Они никогда не были хорошей идеей и [они должны быть устаревшими] (https://metacpan.org/pod/ не CGI # HTML-Generation-функции-должны-не-больше-быть использованы). –

+0

Дэйв благодарит за отличный совет, я понятия не имел. Я не буду звонить на CGI.pm. Попытка найти хорошую альтернативу тому же. LMK, если у вас есть предложения. –

ответ

1

Согласно документации CGI:

Многие подпрограммы будут делать что-то полезное с именованным аргументом, что он не признает.

Так что просто добавить еще один аргумент с именем -required:

$html->popup_menu(
    -name  => "to", 
    -values => [@TO, $param_to], 
    -labels => {%TO, $param_to => $param_to,}, 
    -default => $param_to, 
    -onchange => $onchange, 
    -class => "form-control", 
    -required => "required" 
); 

Это будет генерировать что-то вроде:

<select name="to" ... required="required"> 

Однако генерации HTML с CGI.pm боль и не очень ремонтопригодны. Лучше использовать библиотеку шаблонов, такую ​​как Template Toolkit. Шаблоны позволяют отделить код Perl и ваш HTML (в основном), так что вы можете иметь что-то вроде этого:

popup.tt

<select name="to" onchange="if (this.value=='[email protected]' || document.theForm.supportform.value==1) document.theForm.submit();" class="form-control"> 
    [% FOR option IN options %] 
    <option value="[% option.value %]">[% option.text %]</option> 
    [% END %] 
</select> 

my_script.cgi

use strict; 
use warnings; 

use CGI; 
use Template; 

my $tt = Template->new or die Template->error; 

my $q = CGI->new; 
print $q->header; 

my $options = [ 
    { value => '', text => 'select recipient' }, 
    { value => '[email protected]', text => 'Sales Inquiry' }, 
    { value => '[email protected]', text => 'Technical Support' }, 
    { value => '[email protected]', text => 'Jobs @ abc' }, 
    { value => '[email protected]', text => 'Investor Relations' }, 
    { value => '[email protected]', text => 'abc Webmaster' } 
]; 

$tt->process('foo.tt', { options => $options }) or die $tt->error; 

Выход

<select name="to" onchange="if (this.value=='[email protected]' || document.theForm.supportform.value==1) document.theForm.submit();" class="form-control"> 

    <option value="">select recipient</option> 

    <option value="[email protected]">Sales Inquiry</option> 

    <option value="[email protected]">Technical Support</option> 

    <option value="[email protected]">Jobs @ abc</option> 

    <option value="[email protected]">Investor Relations</option> 

    <option value="[email protected]">abc Webmaster</option> 

</select> 
+0

Спасибо за предложение, но моя база кода огромна. И это займет у меня навсегда, чтобы внедрить систему шаблонов. Возможно, я ошибаюсь, если я ошибаюсь. У меня есть сайт с 40 страницами с 10 полномасштабными приложениями. Пока я просто выплюнул элемент html вместо использования cgi.pm в встроенных функциях. –

Смежные вопросы