0

ASP/VBScript で、レコードセットからテーブルを作成する動的テーブルを作成しました。DO LOOP を使用して、新しい従業員 ID ごとに新しい行が作成されます。ドロップダウン リストには、「チェックイン」と「チェックアウト」の 2 つのオプションがあります。「チェックイン」が選択された場合、コメント ボックスは無効のままになり、「チェックアウト」項目が選択された場合、コメント ボックスは有効になります。両方のオプションを選択すると、日付が生成されます。

問題は、ドロップダウン リストが最初の行でしか機能しないことです。

新しい行があるたびにtest()関数を呼び出すように、コードを書き直す必要があることはわかっています。

関数を複製して、各行に対して実行させる方法はありますか? ID 名に rowCount を追加して、関数名と ID を動的にしようとしました (例: "id="TestCmt<%=rowTest%>)。

多分誰かが私を正しい方向に向けることができますか?私はこれに何時間も費やしましたが、自分で(ある程度)理解したいと思います:)

コードの一部を次に示します。

 <html xmlns:ntb>
 <head>
  <script language="javascript" type="text/javascript">

  function enable() {
  document.getElementById("TestCmt").readOnly = false;
  document.getElementById("TestCmt").style.backgroundColor = "#FFFFFF";
  document.getElementById("TestCmt").innerHTML = "";
  document.getElementById("TestCmt").style.color = "#000000";
  }

  function disable() {
  document.getElementById("TestCmt").readOnly = true;
  document.getElementById("TestCmt").style.backgroundColor = "#DCDCDC";
  document.getElementById("TestCmt").innerHTML = "";
  }

  function test() {
  <%  if (StoreID > 0) AND (rsTest.bof=FALSE) then %> //Make sure there are employees

  var selectMenuT = document.getElementById("TestStatus");
  selectMenuT.onchange = function () {

    var chosenOptionT = parseInt(this.options[this.selectedIndex].value);
    var textDateT = document.getElementById("TestDate");
    var cmtsT = document.getElementById("TestCmt");


    switch (chosenOptionL) {

    case 0:
    disable();
    textDateT.innerHTML = "";
    cmtsT.innerHTML = <%=rsTest("TestCmt")%>
    break;

    case 1:
    disable();
    var approve = getReviewDate(); //excluded this function from here but it works fine
    textDateT.innerHTML = approve;
    break;

    case 2:
    enable();
    var reject = getReviewDate();
    textDateL.innerHTML = reject;
    break;
    }
   }
   <% end if %>
  } 
  </script>
 </head>

<body>

<%  if (StoreID > 0) and rsTest.BOF=FALSE then %> 

 <span class="header">Test Playground - Store# <%=rsStore("StoreNo")%></span>

 <table class="table" name="StoreTable" cellpadding="1" cellspacing="0">
  <tr>
   <td class="TestHeader">Store No.</td>
   <td class="TestHeader">Check-In Status</td>
   <td class="TestHeader">Date</td>
   <td class="TestHeader">Comments</td>
 </tr>

<%         
  dim i3, iStr3
  dim rowTest
  rowTest = 0

  do until rsTest.EOF 
  i3=clng(rsTest("EmployeeID"))
  iStr3=right("000"+cstr(i3),4)
  rowTest = rowTest + 1
%>

 <tr>
   <!-- Store No.-->
   <td>
    <% if StoreID > 0 then %>
    <label id="TestRN<%=rowTest%>"></label>
   </td>

  <!-- Check-In Status-->
  <td class="TestData" valign="top">
    <select id="TestStatus<%=rowTest%>" style="width:100%" **onchange="test()"**>
      <option value="0">&lt;Select one&gt;</option>
      <option value="1">Check-In</option>
      <option value="2">Check-Out</option>
    </select>
  </td>

  <!--Date-->
  <td valign="top">
    <input type="hidden" name="Sequence<%=iStr3%>" id="Sequence<%=iStr3%>">
    <label ID="TestDate<%=rowTest%>" class="TestData"><%=rowTest%></label>
  </td>

  <!--Comments-->
  <td valign="middle">
    <textarea id="TestCmt<%=rowTest%>" rows="2" style="textarea" ReadOnly ></textarea>
  </td>
  <% end if %>
</tr>

 <%
 rsTest.MoveNext
 loop 
 %>

 </table>
 <% end if %>

 </body>
</html>

どんな助けでも大歓迎です。

署名: The Learning Noob

4

2 に答える 2

0

どのドロップダウンが変更されたかを確認できるパラメータをjavascript関数に追加するだけです。

例:

function test(elem) {
    // elem is the dom element (the select)
    // get selected value:
    switch( elem.value ) {

    }
}

<select id="TestStatus<%=rowTest%>" style="width:100%" onchange="test(this)">
</select>
于 2012-05-02T13:57:22.917 に答える
0

助けてくれてありがとう。

最終的に、各IDと関数名に<%= rowTest%>カウンターを配置しました。これにより、行IDごとにtest()関数(「test_1()」、「test_2()」など)が生成されます。

例:

function test()_<%=rowTest%> {
...
}

...
<select id="TestStatus<%=rowTest%>" style="width:100%" onchange="test()_<%=rowTest%>">  
  <option value="0">&lt;Select one&gt;</option>  
  <option value="1">Check-In</option>  
  <option value="2">Check-Out</option>  
</select>  
于 2012-05-09T06:27:25.913 に答える