我有一个Javascript 2-D数组,定义如下:
proData[prov_999998] = new Array();
proData[prov_999998]["address"] = "29 South St. South #202 Uxbridge ON L9P 1V9";
proData[prov_999998]["phone"] = "555-555-5555";
proData[prov_999998]["fax"] = "444-444-4444";
我正在尝试在此函数中访问这些数组元素:
function switchPro(value) {
document.getElementById("letterheadName").value = value;
document.getElementById("letterheadAddress").value = providerData[prov_999998]["address"];
document.getElementById("letterheadAddressSpan").innerHTML = providerData[prov_999998]["address"] ;
document.getElementById("letterheadPhone").value = providerData[prov_999998]["phone"];
document.getElementById("letterheadPhoneSpan").innerHTML = providerData[prov_999998]["phone"];
document.getElementById("letterheadFax").value = providerData[prov_999998]["fax"];
document.getElementById("letterheadFaxSpan").innerHTML = providerData[prov_999998]["fax"];
}
但是我收到一条错误说:“prov_999998未在”providerData [prov_999998] [“address”];“中定义。 有人可以帮我这个吗?我不能将数字作为数组索引,因为javascript不接受以'0'开头的数组索引,如[0999]。这些数组索引是用户输入的ID,我不能对Id格式进行限制。我是javascript的新手,所以我很感激任何帮助。
实际上,我希望第一个索引是一个变量。这就是我在做的事情:
function switchProvider(value) {
var val = "prov_"+value;
document.getElementById("letterheadName").value = value;
document.getElementById("letterheadAddress").value = providerData[val]["address"];
document.getElementById("letterheadAddressSpan").innerHTML = providerData[val]["address"] ;
document.getElementById("letterheadPhone").value = providerData[val]["phone"];
document.getElementById("letterheadPhoneSpan").innerHTML = providerData[val]["phone"];
document.getElementById("letterheadFax").value = providerData[val]["fax"];
document.getElementById("letterheadFaxSpan").innerHTML = providerData[val]["fax"];
}
但是这不起作用,网页上的值被渲染为“未定义”。我做错了什么?
这里有更多代码,它是JSP和Javascript在一起。
var providerData = new Array();
<%
for (Provider p : prList) {
if (!p.getProviderNo().equalsIgnoreCase("-1")) {
String prov_no = "prov_"+p.getProviderNo();
%>
providerData[<%=prov_no%>]["address"] = "<%=(p.getClinicAddress() + " " + p.getClinicCity() + " " + p.getClinicProvince() + " " + p.getClinicPostal()).trim() %>";
providerData[<%=prov_no%>]["phone"] = "<%=p.getClinicPhone().trim() %>";
providerData[<%=prov_no%>]["fax"] = "<%=p.getClinicFax().trim() %>";
<% }
} %>
答案 0 :(得分:0)
您使用的语法是对象键/值对,而不是数组。
你最有可能使用
var proData = {};
proData['prov_999998'] = {};
proData['prov_999998']["address"] = "29 South St. South #202 Uxbridge ON L9P 1V9";
proData['prov_999998']["phone"] = "555-555-5555";
proData['prov_999998']["fax"] = "444-444-4444";
并使用(即。)
访问它providerData['prov_999998']["address"];
现在如果prov_999998是变量,那么你确实应该在没有我添加的引号的情况下访问它,但确保它已经分配了值,并且当你尝试在你的函数中使用它时这个值仍然存在。
原始答案
您应该将prov_999998包装在引号 'prov_999998'
中以使其成为文字,否则将其视为变量。
proData['prov_999998'] = new Array();
proData['prov_999998']["address"] = "29 South St. South #202 Uxbridge ON L9P 1V9";
proData['prov_999998']["phone"] = "555-555-5555";
proData['prov_999998']["fax"] = "444-444-4444";
和
function switchPro(value) {
document.getElementById("letterheadName").value = value;
document.getElementById("letterheadAddress").value = providerData['prov_999998']["address"];
document.getElementById("letterheadAddressSpan").innerHTML = providerData['prov_999998']["address"] ;
document.getElementById("letterheadPhone").value = providerData['prov_999998']["phone"];
document.getElementById("letterheadPhoneSpan").innerHTML = providerData['prov_999998']["phone"];
document.getElementById("letterheadFax").value = providerData['prov_999998']["fax"];
document.getElementById("letterheadFaxSpan").innerHTML = providerData['prov_999998']["fax"];
}
击> <击> 撞击>
答案 1 :(得分:0)
在Javascript内存结构中有足够的索引到达999998的事实令人担忧。如果前面的大部分条目都与它一起加载,你肯定会敲打浏览器。
调用索引999而不是0999有什么问题吗?
看起来你正在尝试使用字符串来索引数组中的辅助项,而不是索引 - 比如'address'和'phone'。
因此,您的结构应该是哈希图的哈希图:
var providerData = {
'0999': {
address: '321 Sesame St',
zip: '12345'
},
'1000': {// more here
}
};
alert(providerData['0999']['address']); // alerts "321 Sesame St"
但您应该考虑加载到其中的数据量。
答案 2 :(得分:0)
猜猜您的关联数组是错误的(或者您的代码缺少信息)。
proData[prov_999998] = new Array();
应该是
proData['prov_999998'] = new Array();
等等。无论如何,你可以使用javascript对象以一种巧妙的方式做到这一点。