SQL Server 使用包含SQL查询的jQuery从HTML Select调用数据属性,以在经典ASP中动态填充其他HTML输入

b5lpy0ml  于 2022-12-28  发布在  jQuery
关注(0)|答案(1)|浏览(112)

根据标题,我想你可以理解我的问题。老实说,我不是很熟悉经典的ASP,但因为在我的工作场所,他们仍然使用经典的ASP,他们要求我编辑一些页面,以创建输入验证。因此,我想用select替换一些input,以动态填充其他输入。然而,我在获取变量时遇到了一些问题,所以我听说可以使用jQuery调用多个数据属性变量。
我正在使用:经典的ASP和SQL Server 2008.
我的目标是,当用户选择某个选项时,jQuery捕获所选选项的值,并与该值相关的列(数据库)。
我将提供3个代码块,我认为它们在这里起着重要的作用。虽然我可能无法在JSFiddle中提供,因为我已经包含了SQL查询。(如果JSFiddle可以处理SQL,那么很抱歉,因为我不知道。)
第一块代码是我的SQL查询,它位于页面顶部:

<%
Dim Recordset5
Dim Recordset5_cmd
Dim Recordset5_numRows

Set Recordset5_cmd = Server.CreateObject ("ADODB.Command")
Recordset5_cmd.ActiveConnection = MM_GajiHari2_STRING
Recordset5_cmd.CommandText = "SELECT * FROM dbo.JBANK"
Recordset5_cmd.Prepared = true

Set Recordset5 = Recordset5_cmd.Execute
'arrRecordset5 = Recordset5.GetRows()
Recordset5_numRows = 0
%>

第二个是我的HTML代码,用于选择基于上面给出的SQL从数据库调用的值。

<td bgcolor="#D5D5FF" class="style3">
   <select name="kod_bank" type="text" class="style22  style26" id="kod_bank"/>
      <option value="" disabled selected>Sila Pilih Kod Bank</option>
        <%
        Dim a
        Dim b
        Dim c

        a = Recordset5.Fields.Item("jKod_Bank").Value
        b = Recordset5.Fields.Item("jNama_Bank").Value
        c = Recordset5.Fields.Item("jTotal_Digit").Value
       
        While (NOT Recordset5.EOF)
        %>

        <option value="<%=(Recordset5.Fields.Item("jKod_Bank").Value)%>" 
           data-bank="[5, 5, 5]">
           <%=(Recordset5.Fields.Item("jKod_Bank").Value)%> (<%=(Recordset5.Fields.Item("jNama_Bank").Value)%>)
        </option>

        <%
           Recordset5.MoveNext()
        Wend

        If (Recordset5.CursorType > 0) Then
           Recordset5.MoveFirst()
        Else
           Recordset5.Requery
        End If
        %>
              
  </select>
</td>
<td bgcolor="#D5D5FF" class="style3"><input name="nama_bank" type="text" class="style22  style26" id="nama_bank" size="50" maxlength="50" onkeyup="caps(this)" readonly="" /></td>
<td bgcolor="#D5D5FF" class="style3"><input name="no_akaun" type="text" class="style22 style26" id="no_akaun" size="30" /></td>

第三个代码块是我的jquery

$(document).ready(function (){

   var getKodBank = document.getElementById("kod_bank");

   if(getKodBank != ""){

      $("#kod_bank").on("change", function(){
      //alert("test");
         $.each($("#kod_bank").attr("data-bank"), function(index, value){
           alert( index + ": " + value );
         });
      });
   }
});
    • 注**

我试过像这样修改jQuery,然后提醒它:

$.each([5, 5], function(index, value)

而且它运行得很好。所以我假设不是我的SQL就是HTML代码出了问题。
还要注意,在HTML代码中,我有这样的data-attribute:

data-bank="[5, 5, 5]"

这只是为了测试它是否能正常工作,但它似乎根本不工作。无论如何,它应该是['a ','b','C '],因为我的目标是调用来自数据库的recordset5变量。
我的代码有什么问题?

xurqigkl

xurqigkl1#

我想我可以在这里找出一些问题。
首先,您在$(...).attr(...)上调用$.each(),它不会执行您想要的操作,因为调用attr(...)data(...)(在您的情况下更可取)只会给予您集合中 first 项的数据值。您需要首先迭代元素,然后 * 获取循环中每个元素的数据。这是一个简单的修复方法。注意,如果改用data(...),您会发现如果jQuery检测到属性的内容有效,它会自动将其解析为对象或数组(因此[5,5,5]会自动转换为JS数组)。
其次,我注意到当你使用ASP生成option元素时,你没有使用Server.HTMLEncode来安全地转义内容。这意味着如果有一个HTML特殊字符,特别是数据中的引号字符,它会破坏HTML并可能导致XSS vulnerability。对属性进行HTML编码将解决这个问题。

相关问题