为javascript数组元素赋值在循环时不起作用(classic.asp),但在没有循环的情况下也能起作用,为什么

Assigning values to javascript array elements doesn’t work when looped (classic .asp), but it works without looping, why?

本文关键字:循环 情况下 起作用 为什么 asp 赋值 数组元素 javascript 不起作用 classic      更新时间:2023-09-26

我使用的是classic.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)到arrHotelsProductCols(3,0)中的正确值填充JSarrHotelsPProdCols[0][0]到JSarrHoteldProdCols[0]。我在打开.asp页面后,使用DblClick上的警报函数来检查这一点。

我还可以看到写入"页面源"的文本:

JSarrHotelsProdCols[0][0] = '4 MEX HOTEL & LIVING';
JSarrHotelsProdCols[0][1] = '3 STAR';
JSarrHotelsProdCols[0][2] = '2KM';
JSarrHotelsProdCols[0][3] = '8KM';

但是,当我运行for/next循环时,我无法使用相同的alert函数在JSarrHotelsProdCols数组中看到值,但我可以看到在"page source"中正确写出的所有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需要这样做)

相关文章: