HTML コードの一部を以下に示します。明らかに2種類のオプションがあります -
ICMP エラー メッセージ (8 つのオプション) と ICMP 情報メッセージ (約 30 のオプション)。
合計 48 のオプションがあり、選択ごとに対応するパケット構造が表示されます。
まず、HTML を見てください。
<tr class="icmperr"><td>
<select name="icmpmsgerrtyp" id="icmpmsgerrtyp">
<option value="res" onclick="icmptyp();">0-Reserved</option>
<option value="desun" onclick="icmptyp();">1-Destination Unreachable</option>
<option value="ptb" onclick="icmptyp();">2-Packet Too Big</option>
<option value="timeex" onclick="icmptyp();">3-Time Exceeded</option>
<option value="paraprob" onclick="icmptyp();">4-Parameter Problem</option>
<option value="privex" onclick="icmptyp();">100-Private Experimentation</option>
<option value="privex1" onclick="icmptyp();">101-Private Experimentation</option>
<option value="resexp" onclick="icmptyp();">127-Reserved For expansion Of ICMPv6 Error Messages </option>
</select> <br\>
</td></tr>
<tr class="icmpinfo"><td>
<select name="icmpinfotyp" id="icmpinfotyp">
<option value="echoreq" onclick="icmptyp();">128-Echo Request</option>
<option value="echorep" onclick="icmptyp();">129-Echo Reply</option>
<option value="mlq" onclick="icmptyp();">130-Multicast Listener Query</option>
<option value="mlr" onclick="icmptyp();">131-Multicast Listener Report</option>
<option value="mld" onclick="icmptyp();">132-Multicast Listener Done</option>
<option value="rs" onclick="icmptyp();">133-Router Solicitation(NDP)</option>
<option value="ra" onclick="icmptyp();">134-Router Advertisement(NDP)</option>
<option value="ns" onclick="icmptyp();">135-Neighbour Solicitation(NDP)</option>
<option value="na" onclick="icmptyp();">136-Neighbour Advertisement(NDP)</option>
<option value="redmsg" onclick="icmptyp();">137-Redirect Message(NDP)</option>
<option value="rr" onclick="icmptyp();">138-Router Renumbering</option>
<option value="niq" onclick="icmptyp();">139-ICMP Node Information Query</option>
<option value="nir" onclick="icmptyp();">140-ICMP Node Information
Response</option>
<option value="indsm" onclick="icmptyp();">141-Inverse Neighbor Discovery
Solicitation Message</option>
<option value="indam" onclick="icmptyp();">142-Inverse Neighbor Discovery
Advertisement Message</option>
<option value="mldr" onclick="icmptyp();">143-Multicast Listener Discovery (MLDv2)
Reports</option>
<option value="hadreqm" onclick="icmptyp();">144-Home Agent Address Discovery
Request Message</option>
<option value="hadresm" onclick="icmptyp();">145-Home Agent Address Discovery
Reply Message</option>
<option value="mps" onclick="icmptyp();">146-Mobile Prefix Solicitation</option>
<option value="mpa" onclick="icmptyp();">147-Mobile Prefix Advertisement</option>
<option value="cps" onclick="icmptyp();">148-Certification Path Solicitation (SEND)
</option>
<option value="cpa" onclick="icmptyp();">149-Certification Path Advertisement
(SEND)</option>
<option value="mra" onclick="icmptyp();">151-Multicast Router Advertisement
(MRD)</option>
<option value="mrs" onclick="icmptyp();">152-Multicast Router Solicitation
(MRD)</option>
<option value="mrt" onclick="icmptyp();">153-Multicast Router Termination
(MRD)</option>
<option value="rcm" onclick="icmptyp();">155-RPL Control Message</option>
<option value="pex" onclick="icmptyp();">200-Private Experimentation</option>
<option value="pex1" onclick="icmptyp();">201-Private Experimentation</option>
<option value="resexpim" onclick="icmptyp();">255-Reserved for expansion of ICMPv6
informational messages</option>
</select> <br\>
</td></tr>
ここで、ICMP Inofrmational message-ECHO Request のオプションを指定したいとします。
だからそれは次のようになります -
<option value="echoreq" onclick="icmptyp();echoreq();">128-Echo
Request</option>
and then a jquery function echoreq() will go like this -
function echoreq() {
$(".echoreq").css("visibility", "visible");
$(".echoreq").css("display", "table-row");
and 47*2 lines to make others invisible
}
約 48 のそのような機能があります。そのため、非常に長くなります。
クラス/関数名を使用するか、どこかで正規表現を使用する際にある種のスマートさを示すことによって、スペースを節約する方法について何か提案がありますが、わかりませ
ん。
些細なことが抜けている場合はご容赦ください。タイトルにも編集が必要です。前もって感謝します。
編集:
こんな感じで使いました。ここで何が問題なのですか?
サンプル HTML -
<tr class="icmppac icmppacdesun">
<td width="249">Unused</td>
<td width="249"><input type="text" name="icmppacdesun" size="20"
id="icmppacdesun"/> [Default : 0] </td>
</tr>
そして、このような関数呼び出し -
<option value="desun" onclick="icmptyp();icmppacstr('.icmppacdesun');">1-Destination
Unreachable</option>
そしてこのようなjquery -
function icmppacstr(myobject) {
$(myobject).css("visibility", "visible");
$(myobject).css("display", "table-row");
$(".icmppac").css("visibility", "hidden");
$(".icmppac").css("display", "none");
}
EDIT2:
.......
<select name="icmpmsgerrtyp" id="icmpmsgerrtyp" onchange="myfun2(this.value)">
.....
<select name="icmpinfotyp" id="icmpinfotyp" onchange="myfun2(this.value)">
....
そしてmyfun2はこんな感じでした...
function myfun2(object)
{
if(object=="desun")
{
// working fine
icmppacstr('.icmppacdesun');
}
//and so on for first select
if(object=="echoreq")
{
alert('hi'); // its getting printed
icmppacstr('.icmppacechoreq'); // but its not executing
}
//and so on for second select
}
最初の選択に対応するオプションではうまくいきますが、2番目の選択オプションからいずれかを選択しても何も起こりません。