给 javascript 数组元素赋值在循环时不起作用(经典的 .asp),但在没有循环的情况下却有效,为什么?
Assigning values to javascript array elements doesn’t work when looped (classic .asp), but it works without looping, why?
我使用的是经典 .asp。
我有以下内容:
<script language="javascript">
var JSintTotal = <% =intTotal%>;
var JSarrHotelsProdCols = Create2DArray(JSintTotal);
<%
for x = 0 to intTotal - 1
response.write "JSarrHotelsProdCols["&x&"][0] = "&arrHotelsProdCols(0,x)&"';" & vbCrLf
response.write "JSarrHotelsProdCols["&x&"][1] = '"&arrHotelsProdCols(1,x)&"';" & vbCrLf
response.write "JSarrHotelsProdCols["&x&"][2] = '"&arrHotelsProdCols(2,x)&"';" & vbCrLf
response.write "JSarrHotelsProdCols["&x&"][3] = '"&arrHotelsProdCols(3,x)&"';" & vbCrLf
next
%>
</script>
Create2DArray() 函数运行正常,我从这个网站上抓取的。
如果我注释掉 for/next 循环并使 x=0,这将使用 arrHotelsProdCols(0,0) 中的正确值填充 JSarrHotelsProdCols[0][0] 到 JSarrHotelsProdCols[0][3] ) 通过 arrHotelsProdCols(3,0)。我在打开 .asp 页面后使用警报功能 onDblClick 检查了这一点。
我还可以看到写入“页面源”的文本:
JSarrHotelsProdCols[0][0] = '4 MEX HOTEL & LIVING';
JSarrHotelsProdCols[0][1] = '3 STAR';
JSarrHotelsProdCols[0][2] = '2KM';
JSarrHotelsProdCols[0][3] = '8KM';
但是,当我 运行 for/next 循环时,我无法使用相同的警报函数看到 JSarrHotelsProdCols 数组中的值,但我可以看到所有 612 x 4 语句在'页面源代码'。
为什么当我循环执行此作业时它不起作用,但当我不循环执行它时却有效?
如果您需要更多信息,请告诉我,我不确定多少就够了。
谢谢。
循环内的第一行缺少撇号。改变...
response.write "JSarrHotelsProdCols["&x&"][0] = "&arrHotelsProdCols(0,x)&"';" & vbCrLf
...到...
response.write "JSarrHotelsProdCols["&x&"][0] = '"&arrHotelsProdCols(0,x)&"';" & vbCrLf
您可以使用反斜杠转义 JavaScript 中可能位于数组值内的撇号,例如 Replace(arrHotelsProdCols(0,x), "'", "\'")
。或者,您可以将单引号替换为双引号(如果双引号不存在于您的数组值中),例如...
response.write "JSarrHotelsProdCols["&x&"][0] = """&arrHotelsProdCols(0,x)&""";" & vbCrLf
(请注意,如果双引号已经在 VBScript 字符串中,则 VBScript 需要重复双引号)
我使用的是经典 .asp。 我有以下内容:
<script language="javascript">
var JSintTotal = <% =intTotal%>;
var JSarrHotelsProdCols = Create2DArray(JSintTotal);
<%
for x = 0 to intTotal - 1
response.write "JSarrHotelsProdCols["&x&"][0] = "&arrHotelsProdCols(0,x)&"';" & vbCrLf
response.write "JSarrHotelsProdCols["&x&"][1] = '"&arrHotelsProdCols(1,x)&"';" & vbCrLf
response.write "JSarrHotelsProdCols["&x&"][2] = '"&arrHotelsProdCols(2,x)&"';" & vbCrLf
response.write "JSarrHotelsProdCols["&x&"][3] = '"&arrHotelsProdCols(3,x)&"';" & vbCrLf
next
%>
</script>
Create2DArray() 函数运行正常,我从这个网站上抓取的。
如果我注释掉 for/next 循环并使 x=0,这将使用 arrHotelsProdCols(0,0) 中的正确值填充 JSarrHotelsProdCols[0][0] 到 JSarrHotelsProdCols[0][3] ) 通过 arrHotelsProdCols(3,0)。我在打开 .asp 页面后使用警报功能 onDblClick 检查了这一点。
我还可以看到写入“页面源”的文本:
JSarrHotelsProdCols[0][0] = '4 MEX HOTEL & LIVING';
JSarrHotelsProdCols[0][1] = '3 STAR';
JSarrHotelsProdCols[0][2] = '2KM';
JSarrHotelsProdCols[0][3] = '8KM';
但是,当我 运行 for/next 循环时,我无法使用相同的警报函数看到 JSarrHotelsProdCols 数组中的值,但我可以看到所有 612 x 4 语句在'页面源代码'。
为什么当我循环执行此作业时它不起作用,但当我不循环执行它时却有效?
如果您需要更多信息,请告诉我,我不确定多少就够了。
谢谢。
循环内的第一行缺少撇号。改变...
response.write "JSarrHotelsProdCols["&x&"][0] = "&arrHotelsProdCols(0,x)&"';" & vbCrLf
...到...
response.write "JSarrHotelsProdCols["&x&"][0] = '"&arrHotelsProdCols(0,x)&"';" & vbCrLf
您可以使用反斜杠转义 JavaScript 中可能位于数组值内的撇号,例如 Replace(arrHotelsProdCols(0,x), "'", "\'")
。或者,您可以将单引号替换为双引号(如果双引号不存在于您的数组值中),例如...
response.write "JSarrHotelsProdCols["&x&"][0] = """&arrHotelsProdCols(0,x)&""";" & vbCrLf
(请注意,如果双引号已经在 VBScript 字符串中,则 VBScript 需要重复双引号)