Perl CGI和Javascript:动态依赖下拉列表

时间:2013-10-11 14:17:12

标签: javascript html mysql perl cgi

我通常是一名C / C ++程序员,但我的工作认为所有软件都是一样的,所以我必须建立一个网页,将信息输入到mysql数据库中。由于其他程序员之一对我们所有的内部网页都使用了Perl CGI,因此我决定使用它来保持一致性。

我有几个不同的哈希值来存储我需要从数据库创建下拉列表的信息。这里是哈希包含的内容:

%issues(问题ID:问题)(问题ID与问题名称)

%step(StepID:Step)(带步骤名称的stepid)

%stepissueid(StepID:IssueID)(将不同的步骤与特定问题联系起来)

针对问题下拉列表的问题的Perl / HTML创建下拉列表 *第二次依赖下拉不会*

#begin Issue Drop Down 
print "<td valign=\"top\" colspan=1><font $c2> Issue:<br> ";
$temp = scalar keys %issue;
print "<select id='Issue1' name=\"optone\"";
print "onchange=\"setOptions(document.myform.optone.options[document.myform.optone.selectedIndex].value);\">";
foreach my $x (sort(keys %issue))
{
    if ($x == $issueid)
    {
        print "<OPTION selected=selected value=\"$x\"> $issue{$x}</OPTION>"; 
    }
    else
    {
         print "<OPTION value=\"$x\"> $issue{$x}</OPTION>"; 
    }
}
print "</select>";

print "<select name=\"opttwo\" size=\"1\">";
print "<option>Please select one of the options above first</option>";
print "</select>";

setOptions的Javascript:因为我不知道有多少元素或它们是什么我创建了一个循环来创建javascript和多个if语句

print "<head>";
print "<script language=\"JavaScript\">";
print "<!--";
print "function setOptions(chosen){";
print "var selbox=document.myform.opttwo;";
print "selbox.options.length = 0;";

foreach my $x (sort(keys %issue))
{
    print "if (chosen == $x)";
    {
        foreach my $y (sort(keys %step))
        {
            if ($stepissueid{$y} == $x)
            {
                print "selbox.options[selbox.options.length] = new";
                print "Options('$step{$y}','$y');";
            }
        }
    }
}
print "}";
print "//-->";
print "</script>";
 print "</head>";

编辑:我很确定有一个看不见的控制角色让事情陷入困境,因为我确实重新输入了它,一切正常。现在我遇到的问题是我收到来自数据库的信息,如果已经选择了一个选项,我想自动选择步骤下拉菜单(我知道有大量的非活动时间,我还有其他更重要的工作的项目)

我尝试添加onselect=\"setOptions(document.myform1.optone.options[document.myform1.optone.selectedIndex].value);\">  在opttwo选择HTML但没有做任何事情(试图在第二次下拉到自动填充期间调用我的JS函数)

2 个答案:

答案 0 :(得分:0)

也许你的第二段代码中有一个Javascript错误?

print "<!--";

应该是

print "//<!--";

这可能会使js功能失效,导致你所看到的。

Perl推荐

我建议你使用像这样的Perl打印结构使你的javascript和HTML更具可读性:

#begin Issue Drop Down 
$temp = scalar keys %issue;
print<<HTML_JS_EOF;
<td valign="top" colspan=1><font $c2> Issue:<br>
<select id='Issue1' name="optone"
onchange="setOptions(document.myform.optone.options[document.myform.optone.selectedIndex].value);">
HTML_JS_EOF
foreach my $x (sort(keys %issue))
{
    if ($x == $issueid)
    {
        print "<OPTION selected=selected value=\"$x\"> $issue{$x}</OPTION>"; 
    }
    else
    {
         print "<OPTION value=\"$x\"> $issue{$x}</OPTION>"; 
    }
}
print<<HTML_JS_EOF;
</select>

<select name="opttwo" size="1">
<option>Please select one of the options above first</option>
</select>
HTML_JS_EOF

答案 1 :(得分:0)

真的需要以最难的方式重新发明轮子吗?使用Ext JS代替客户端而RPC::ExtDirect代替服务器端,可以节省大量时间。