无法获取动态变量名来获取document.getElementById上的结果,只返回字符串

时间:2017-12-07 07:44:06

标签: javascript variables dynamic

我是JS的新手并且已经尝试了一段时间已经自己解决了这个问题,但经过大量的搜索后(发现了很多关于连接或以其他方式使变量动态但不是如何使用这些变量的方法的信息检索属性)并尝试我最终决定寻求帮助。

我一直在尝试使用动态变量来获取对象的属性,首先将我的信息输出到JS对象,然后从下拉列表中获取值,选择元素和字符串,将所有信息组合到一个字符串中,之后将该字符串用作 object.property 。但是我最终得到的结果只是输出字符串似乎是正确的,但它只是作为一个字符串打印出来,而不是作为 object.property 。可能这只是一些我无法弄清楚的小事,或者我的方法可能完全错了。也已经通过输出隐藏的表元素,然后更改hidden = false来尝试相同,但结果或多或少相同。通过将字符串硬编码为 object.property ,我得到了我正在寻找的结果,这只是为了测试我的对象。

使用似乎正常工作的对象构造函数:

 function myCar(carClass, id, brandType, price) {
     this.carClass = carClass;
     this.id = id;
     this.brandType = brandType;
     this.price = price;
 };

当获取数据库信息时,myCar或对象变量名称变为例如" sedan_car_audi",并且其他信息在各自的位置。

下拉信息来自此处:

<fieldset>
<p>
<span>myCarType Title: <select name="myCarType" id="myCarTypeId" onchange="clearSelectionOutput()" > 
 <option value="sedan" > sedan
 <option value="hatchback" > hatchback
 <option value="convertible" > convertible
 <option value="customized" > customized     
 </select></span> 

<select name="vehicleType" id="vehicleType" hidden> 
<option value="car">
</select>

<span>myCarBrand Title: <select name="myCarBrand"id="myCarBrandId" onchange="clearSelectionOutput()" >
 <option value="audi" > Audi
 <option value="bmw"   > BMW    
 <option value="mercedenz" > Mercedenz
 <option value="volvo"    > Volvo 
 </select></span> 
 <input type="submit" onclick="myCarBrandAndTypeFunction()" value="Submit">
 </p>
 </fieldset>

我尝试制作组合变量的脚本(或实际上是我尝试过的几种方式)并使用document.getElementById来获取结果,例如sedan_car_audi.price,但我得到的只是字符串&#34; sedan_car_audi.price&#34;结果,而不是价格属性值..(这适用于在&#34; demo10&#34;

上显示它
    <script> 

function myCarBrandAndTypeFunction(){
 var myCarTypeIdVariable =document.getElementById("myCarTypeId");
 var myCarBrandIdVariable =document.getElementById("myCarBrandId");
 var vehicleTypeVariable =document.getElementById("vehicleType");

 var underscore ="_";
 var priceAddendum = ".price";

 var myCarPriceCheckBuilder = {
     first: myCarTypeIdVariable.value,
     second: underscore,
     third: vehicleType.value,
     fourth: underscore,
     fifth: myCarBrandIdVariable.value,
     sixth: priceAddendum,
     seventh: function () {return this.first + this.second + this.third + this.fourth + this.fifth + this.sixth}
             };

     var myCarPriceCheckBuilderAlltogether =  myCarTypeId.value + underscore + vehicleType.value + underscore + myCarBrandId.value + priceAddendum;
     var myCarPriceCheckBuilderStraight = myCarTypeId.value + "_" + vehicleType.value + "_" + myCarBrandId.value;    
     var myCarPriceCheckBuilderObjectNew = {one : ""};
        myCarPriceCheckBuilderObjectNew.one = myCarPriceCheckBuilder['seventh'] ;


         document.getElementById("demo10").innerHTML = sedan_car_audi.price + " €";      
         document.getElementById("demo11").innerHTML = "Your car price is " + myCarPriceCheckBuilderAlltogether + " €"; 
         document.getElementById("demo13").innerHTML = "My New Car's price is " + myCarPriceCheckBuilder.seventh + " €"  ;  
      };


         function clearSelectionOutput(){
         document.getElementById("demo10").innerHTML = "";
         document.getElementById("demo11").innerHTML = "";
         document.getElementById("demo12").innerHTML = ""; 
         document.getElementById("demo13").innerHTML = ""; 
         document.getElementById("demo14").innerHTML = "";        
      };
     </script> 

我希望这很清楚,这是我的真实代码的修改版本,但应该准确地复制/修改。

不眠之夜和灰白的头发会非常感激任何帮助。

1 个答案:

答案 0 :(得分:0)

我不完全确定你想要什么,但这是我的解决方案:

myCarPriceCheckBuilderObjectNew.one = eval(myCarPriceCheckBuilder['seventh']());

您还需要定义对象sedan_car_audi,并且类似于获取值,否则会引发错误。希望得到答案!