JavaScript函数的更改取决于HTML表单中的值

时间:2018-07-03 13:36:12

标签: javascript

我对JS和HTML还是很陌生,并且正在使用别人编写的代码,因此我不太了解它。我会尽力提出一个适当的问题。

在HTML中,我有

 <select id="temp-option" name="temp-option" value="{{temp-option}}">
          <option value="Water">Water temperature</option>
          <option value="Air">Air temperature</option>
 </select>

然后我用var tempOption = document.getElementById("temp-option");获取用户在JS中选择的值,并希望使用此值来更改函数中的变量。它应该很简单,但是代码超出了我的理解范围,因此我无法弄清楚如何使我的特定案例起作用。

function plot(){
    //Leave out what I think is irrelevant.
    let temperatures1 = mapping((f) => {return {time: time_since(f.DateAndTime, startTime), temp: f.WaterTemperature}}, estimation.EstimationData);
    let temperatures2 = mapping((f) => {return {time: time_since(f.DateAndTime, startTime), temp: f.WaterTemp}}, tempData);
}

因此,水温存储在两个JSON字符串中(据我了解),并以不同的名称调用,因此我需要根据温度1或温度2发送不同的变量。

我试图用if语句来做到这一点。

if(tempOption.value == "Water"){
   tempChoice = ["f.WaterTemperature", "f.WaterTemp"]
}
if(tempOption.value == "Air"){
   tempChoice = ["f.AirTemperature", "f.AirTemp"]
}

,然后将温度为“ temp:xxx”的xxx与tempChoice[1]tempChoice[2]交换:

let temperatures1 = mapping((f) => {return {time: time_since(f.DateAndTime, startTime), temp: tempChoice[0]}}, estimation.EstimationData);`

如果需要了解,请点击这里。

function map(f, xs) {
    var xs2 = [];
    for (var i = 0; i < xs.length; i++) {
    xs2.push(f(xs[i]));
    }
    return xs2;
}

将非常感谢您提供一些有关如何解决此问题的帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

您应该执行一些Js教程。因为您在做什么是一些“严重”错误。看看Json和Arrays是如何工作的。

我没有完全理解代码,但是这行不通:

if(tempOption.value == Water){
tempChoice = ["temp: f.WaterTemperature", "temp: f.WaterTemp"]
}

因为您正在创建一个数组,并且此数组包含两个字符串。我非常怀疑,这就是您想要做的。我猜您想在数组中使用JS bject文字。像这样:

tempChoice =[{"temp":f.WaterTemperature},{"temp":f.WaterTemp}]

您还正在将值与非字符串进行比较

if(tempOption.value ==="Water") 

应该是您可能想要做的

修改 顺便说一句,如果没有必要,我不会使用此代码。我认为命名真的很糟糕。例如“ f”通常是一个将要调用的函数(作者在函数映射中所做的事情),但是在映射函数内部,“ f”用作包含对象的参数。这使得代码更加难以理解

答案 1 :(得分:0)

不确定有编程经验的人是否会推荐此解决方案。当我较有知识时,可能稍后需要重做。

对我有用的解决方案非常简单,我只需要更改如何调用JS对象即可。最初,我使用objectName.property,正如您在问题中看到的那样。我在if语句中生成的字符串无法替换“属性”。当您改用objectName["property"]访问对象的属性时,该属性名称显示为字符串,因此可以轻松地用另一个字符串替换。就我而言,objectName[tempChoice[0]]objectName[tempChoice[1]]

但是请记住,这可能是一个问题的解决方案,该问题仅是由于开始时的不良编程而引起的。如果您知道另一种解决方案,我想是可以使用该解决方案,请共享。