0

我在 ASP/VBScript 中创建了一个动态表,它从记录集中填充一个表。使用 DO LOOP 为每个新的 EmployeeID 创建一个新行。下拉列表有 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>

任何帮助表示赞赏。

签名:学习菜鸟

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

谢谢您的帮助。

我最终将 <%=rowTest%> 计数器放在我的每个 ID 和函数名称中。这又为每个行 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 回答