我通常是一名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函数)
答案 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代替服务器端,可以节省大量时间。