大家好,祝大家圣诞快乐。
根据标题,我认为你可以稍微了解我的问题。说实话,我对经典的asp不太熟悉,但是因为在我的工作场所,他们仍然使用经典的asp,他们让我编辑一些页面来创建输入的验证。因此,我想用一些动态填充其他输入的select替换一些输入。但是,我在获取变量时遇到了一些问题。所以我听说过数据属性,你可以使用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-bank="[5, 5, 5]"
这仅用于测试它是否与正常值一起工作但似乎根本不起作用。无论如何,它应该是['a','b','c'],因为我的目标是调用来自数据库的recordset5变量。
我的代码有什么问题?真。请帮忙。
我想我可以在这里找出一些问题。
首先,你在$.each()
上调用$(...).attr(...)
,它不会做你想要的,因为调用attr(...)
或data(...)
(在你的情况下更可取)只会给你集合中第一项的数据值。您需要首先迭代元素,然后获取循环内每个元素的数据。这是一个简单的解决方案。请注意,如果您切换到使用data(...)
,您会发现jQuery会自动将其解析为对象或数组,如果它检测到该属性的内容是有效的(因此您的[5,5,5]
将自动转换为JS数组)。
其次,我注意到当你使用ASP生成option
元素时,你没有使用Server.HTMLEncode
来安全地逃避内容。这意味着如果有一个HTML特殊字符,特别是数据中的引号字符,它将破坏HTML并可能导致XSS vulnerability。对该属性进行HTML编码将解决该问题。