Javascript 仅当项目存在时定义变量

Javascript 仅当项目存在时定义变量,javascript,arrays,Javascript,Arrays,在这个网站上几位好心人的帮助下,我能够得到下面脚本的一个变体,根据他们在下拉菜单中所做的选择填充一些文本字段。基本上,他们从下拉列表中选择自己的位置,然后用地址输入_19和城市、州和邮政编码输入_21填充文本字段。当扩展到多种用途时,我意识到有时候套件号需要在一个单独的字段中,所以我添加了两个额外的变量,将地址输入_26和套件号输入_21分开。在没有输入_21的情况下,纸条出现故障。是否有方法仅在字段存在时使用脚本的部分 // JavaScript Document // Pre popula

在这个网站上几位好心人的帮助下,我能够得到下面脚本的一个变体,根据他们在下拉菜单中所做的选择填充一些文本字段。基本上,他们从下拉列表中选择自己的位置,然后用地址输入_19和城市、州和邮政编码输入_21填充文本字段。当扩展到多种用途时,我意识到有时候套件号需要在一个单独的字段中,所以我添加了两个额外的变量,将地址输入_26和套件号输入_21分开。在没有输入_21的情况下,纸条出现故障。是否有方法仅在字段存在时使用脚本的部分

// JavaScript Document

// Pre populated array of data
var myData1 = new Array();
myData1['Addison'] = '14295 Midway Road, Suite 100';
myData1['Arlington'] = '1241 W. Green Oaks Blvd., Suite 101';
myData1['Colleyville'] = '1210 Hall Johnson Road, Suite 150';
myData1['Fire Wheel'] = '650 Beebalm Lane, Suite 260';
myData1['Flower Mound'] = '3020 Corporate Court, Suite 400';
myData1['Fort Worth'] = '4421 Oak Park Lane, Suite 102';
myData1['Legacy'] = '7500 Dallas Pkwy., Suite 175';
myData1['Mansfield'] = '1405 N. Highway 287, Suite 101';
myData1['McDermott'] = '3915 McDermott Road, Suite 2000';
myData1['Preston Center'] = '8201 Preston Road, Suite 450';
var myData2 = new Array();
myData2['Addison'] = 'Addison, TX 75001';
myData2['Arlington'] = 'Arlington, TX 76013';
myData2['Colleyville'] = 'Colleyville, TX 76034';
myData2['Fire Wheel'] = 'Garland, TX 75040';
myData2['Flower Mound'] = 'Flower Mound, TX 75028';
myData2['Fort Worth'] = 'Fort Worth, TX 76109';
myData2['Legacy'] = 'Plano, TX 750241';
myData2['Mansfield'] = 'Mansfield, TX 76063';
myData2['McDermott'] = 'Plano, TX 75025';
myData2['Preston Center'] = 'Dallas, TX 75225';
var myData3 = new Array();
myData3['Addison'] = 'Suite 100';
myData3['Arlington'] = 'Suite 101';
myData3['Colleyville'] = 'Suite 150';
myData3['Fire Wheel'] = 'Suite 260';
myData3['Flower Mound'] = 'Suite 400';
myData3['Fort Worth'] = 'Suite 102';
myData3['Legacy'] = 'Suite 175';
myData3['Mansfield'] = 'Suite 101';
myData3['McDermott'] = 'Suite 2000';
myData3['Preston Center'] = 'Suite 450';
var myData4 = new Array();
myData4['Addison'] = '14295 Midway Road';
myData4['Arlington'] = '1241 W. Green Oaks Blvd.';
myData4['Colleyville'] = '1210 Hall Johnson Road';
myData4['Fire Wheel'] = '650 Beebalm Lane';
myData4['Flower Mound'] = '3020 Corporate Court';
myData4['Fort Worth'] = '4421 Oak Park Lane';
myData4['Legacy'] = '7500 Dallas Pkwy.';
myData4['Mansfield'] = '1405 N. Highway 287';
myData4['McDermott'] = '3915 McDermott Road';
myData4['Preston Center'] = '8201 Preston Road';




var element = document.querySelector('form.cart');
element.input_1.onchange = updateText;
function updateText() {
var obj_sel = element.input_1;
element.input_19.value = myData1[obj_sel.value];
var obj_sel = element.input_1;
element.input_21.value = myData2[obj_sel.value];
var obj_sel = element.input_1;
element.input_26.value = myData3[obj_sel.value];
var obj_sel = element.input_1;
element.input_31.value = myData4[obj_sel.value];
}

谢谢

如果对象不存在,您的脚本将抛出一个错误,因为您正在尝试将属性分配给未定义的对象。由于您不知道该错误,脚本将在该点停止运行。在尝试设置对象的值之前,可以使用if语句确认对象未定义。您也不需要重复var obj_sel=element.input_1;每次使用时:

function updateText() {
  var obj_sel_value = element.input_1.value;

  if(element.input_19)
    element.input_19.value = myData1[obj_sel_value];
  if(element.input_21)
    element.input_21.value = myData2[obj_sel_value];
  if(element.input_26)
    element.input_26.value = myData3[obj_sel_value];
  if(element.input_31)
    element.input_31.value = myData4[obj_sel_value];
}
这应该可以解决您的问题,但您还可以做其他事情来改进代码,并在将来节省时间。例如,您可以使用对象数组,而不是为每个myData对象设置一个变量。如果你发现自己用一个数字来填充变量名,这是一个很好的指示,你应该考虑用一个数组替换所有这些变量。
var myData = [];
myData[0] = {};
myData[0]['Addison'] = '14295 Midway Road, Suite 100';
...
myData[0]['Preston Center'] = '8201 Preston Road, Suite 450';
myData[1]['Addison'] = 'Addison, TX 75001';
...
myData[1]['Preston Center'] = 'Dallas, TX 75225';
myData[2] = {};
...
...
还要注意,我用{}替换了新的数组调用。这是有意义的,因为您将它当作对象而不是数组来使用。Javascript数组是由数字键索引的有序集合。如果您有字符串键,则使用的是对象,而不是数组。对象是键、值对的无序集合