2013-10-11 26 views
0

我通常是C/C++程序員,但我的工作認爲所有軟件都是相同的,所以我必須建立一個網頁才能將信息輸入到mysql數據庫中。由於其他程序員之一爲我們所有的內部網頁使用Perl CGI,因此我決定爲了一致性而使用它。Perl CGI和Javascript:動態依賴下拉列表

我有幾個不同的哈希來存儲我需要從數據庫創建下拉列表的信息。這裏是什麼哈希包含:

%issues(IssueID:發行)(發行編號以議題名稱)

%step(StepID:步驟)(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>"; 

的JavaScript setOptions:因爲我不知道他們有多少元素或什麼是我創建了一個循環來創建的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>"; 

編輯:我敢肯定有一個看不見的控制角色,讓事情變得混亂起來,因爲我從字面上重新輸入了它,一切都奏效了。現在我遇到的問題是我從數據庫接收信息,並且我想要自動選擇步驟下拉菜單,如果已經選擇了一個選項(我知道有很多閒置時間,我還有其他更重要的項目上工作)

我嘗試添加了opttwo選擇HTML下onselect=\"setOptions(document.myform1.optone.options[document.myform1.optone.selectedIndex].value);\"> 但什麼也沒做(試圖在第二個下拉時叫我JS funcition自動填充)

+0

什麼是實際和什麼是期望的輸出? –

+0

Acctual:下拉1包含3個問題,下拉2僅包含「請首先選擇上面的選項之一」 –

+0

期望:下拉1包含3個問題,下拉2包含解決在下拉列表中選擇的特定問題的步驟1 %step) –

回答

0

也許你有一個JavaScript錯誤的第二塊代碼?

print "<!--"; 

應該

print "//<!--"; 

這樣可以使JS功能不起作用,導致你所看到的。

Perl的建議

我建議你讓你的JavaScript和HTML更具可讀性使用Perl的打印結構是這樣的:

#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 
+0

我在我的js中改變了「// <! - 」但是沒有沒有任何顯示差異。是否有可能「選擇」沒有正確發送給js,因爲我創建了js後看起來像是什麼,它是 –

+0

函數setOptions(選擇)var selbox = document.myform.opttwo; selbox.option.length = 0;選項('Clean Nozzle','1');選項('Clean Nozzle','1'); selbox.options [selbox.options.length] = new Option('Fix Bobbles','2'); } –

+0

您是否收到任何javascript錯誤? –

0

是否有真正需要推倒重來可能最難的方式?客戶端使用Ext JS,服務器端使用RPC::ExtDirect,這將爲您節省大量時間。