2016-04-14 18 views
0

我有一种情况,我需要用户输入一个特定的号码(例如他们的月度帐单),或者在他们没有特定号码的情况下,从一个按州平均下拉。我不确定如何编写if/else语句,首先询问是否定义了特定的输入,并代替文本输入来检查下拉值。If/else语句和用户下拉选择

编辑:这是我得到的东西可行的,没有运气的第二次尝试:/

JS

var val = document.getElementById('perKWhCost').value; 
    var select_value = document.querySelector('#selection').value; 
    var getMonthlyCost = function(){ 

     if (val){ 
      getMonthlyCost = val; 
     } 
     else{ 
      getMonthlyCost = select_value; 
     } 
     console.log(getMonthlyCost); 
    } 

    var getAnnualSavings = getMonthlyCost * finalAnnualEnergy; 

HTML

<div class="form-group"> 
      <label name="monthlyCost" for="inputKWh">Per kWh cost(see energy bill)</label> 
      <p>This should look like "<em>$0.11/kWh</em>"</p> 
      <input type="text" value="" class="form-control" id="perKWhCost" placeholder="0.11"> 
      <label for="state">Or select a state</label> 
      <select name="Cost" id="selection"> 
       <option value=".11">Alabama</option> 
       <option value=".19">Alaska</option> 
       <option value=".11">Arizona</option> 
       <option value="AR">Arkansas</option> 
       <option value="CA">California</option> 
       <option value="CO">Colorado</option> 
       <option value=".20">Connecticut</option> 
       <option value=".13">Delaware</option> 
       <option value=".13">District Of Columbia</option> 
       <option value=".12">Florida</option> 
       <option value=".11">Georgia</option> 
       <option value="HI">Hawaii</option> 
       <option value="ID">Idaho</option> 
       <option value=".11">Illinois</option> 
       <option value=".11">Indiana</option> 
       <option value=".11">Iowa</option> 
       <option value=".12">Kansas</option> 
       <option value="KY">Kentucky</option> 
       <option value="LA">Louisiana</option> 
       <option value=".18">Maine</option> 
       <option value="MD">Maryland</option> 
       <option value=".19">Massachusetts</option> 
       <option value=".15">Michigan</option> 
       <option value=".12">Minnesota</option> 
       <option value="MS">Mississippi</option> 
       <option value=".09">Missouri</option> 
       <option value="MT">Montana</option> 
       <option value=".09">Nebraska</option> 
       <option value="NV">Nevada</option> 
       <option value="NH">New Hampshire</option> 
       <option value=".16">New Jersey</option> 
       <option value="NM">New Mexico</option> 
       <option value="NY">New York</option> 
       <option value="NC">North Carolina</option> 
       <option value=".09">North Dakota</option> 
       <option value=".12">Ohio</option> 
       <option value="OK">Oklahoma</option> 
       <option value="OR">Oregon</option> 
       <option value=".14">Pennsylvania</option> 
       <option value=".18">Rhode Island</option> 
       <option value="SC">South Carolina</option> 
       <option value=".10">South Dakota</option> 
       <option value="TN">Tennessee</option> 
       <option value="TX">Texas</option> 
       <option value="UT">Utah</option> 
       <option value=".17">Vermont</option> 
       <option value="VA">Virginia</option> 
       <option value="WA">Washington</option> 
       <option value="WV">West Virginia</option> 
       <option value="WI">Wisconsin</option> 
       <option value="WY">Wyoming</option> 
      </select> 
      </div> 


      <input type="button" value="Calculate!" id="submit" class="btn btn-default btn-lg" onclick="doMath();"> 
     </form> 

注:上面的JS是doMath函数的一部分,在这里没有完全展示。此外,忽略不是每个选项都有一个十进制值,这将在工作代码中进行更改。

这是我所需要的要点。我需要检查文本字段中是否有值,如果有我想getMonthlyCost存储该值(最好只有它的数字)。如果在文本框中没有输入,我希望代码检查选择器下拉列表,并选择用户并将该值传递给getMonthlyCost。

+0

您的代码在HTML和JS的问题。看到红色的标记。另外,在我看来,你首先要检查文本输入,如果是空的检查下拉列表,但脚本逻辑从第一个(尝试)检查下拉列表(js第2行)开始。同样在你的html中你可以调用一个不存在的函数。我认为你可以做得更好。 – yezzz

+0

请显示你的html,如果你制作一个plnkr会更好,其他的东西是“getMonthlyCost”是一个函数,你使用它就像一个变量。你能证实吗? –

回答

0

你可以做这样的事情

var getMonthlyCost = function(){ 
    var val = document.getElementById('perKWhCost').value; 
    var select_value = document.getElementById('selection'); 
    var parsedValue=parseFloat(val);//parse if user entered valid float or nothing 
    if (parsedValue!=NaN & val!=""){// check parsed value 
     return val; 
    } 
    else{ 
     if(select_value.selectedIndex != null) { //check if user has selected DropDown and get selected value if yes 
     return select_value.options[select_value.selectedIndex].value;} 
     else {//nothing entered} 
    } 
} 

function doMath() { 
    var getAnnualSavings = getMonthlyCost * 12; 
    console.log(getAnnualSavings); 
} 
0

它看起来像您指定了“getMonthlyCost”的功能,并假设它不是一个在试图获得“getMonthlyCost”时调用。下面的代码应该工作

var getMonthlyCost = function(){ 
    var val = document.getElementById('perKWhCost').value; 
    var select_value = document.querySelector('#selection').value; 
    var returnValue = !!val ? val : select_value; 
    console.log(returnValue); 
    return returnValue; 
} 

var getAnnualSavings = getMonthlyCost() * finalAnnualEnergy; 

或者你可以做

var monthlyCost = document.getElementById("perKWCost").value || document.querySelector("#selection").value; 
var annualSavings = monthlyCost * finalAnnualEnergy; 

monthlyCost将采取占据第一位,如果两者都规定,如果第一个是“”,未定义或为空,它会拿第二个;

我希望这有助于

例子:https://jsfiddle.net/12znp29s/

文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_OR_()

+0

第一个很棒!谢谢!并感谢所有贡献的人,你们都很棒!我可以问_why_它有效吗?看起来,变量存储用户的潜在输入,然后函数评估是否有文本输入,如果没有,则返回select_value。但是,** !! var究竟是什么? val:select_value; **做? '!!'和'?'尤其是。 – user2391365

+0

它的内联if语句 –

+0

!! val是检查val是否为空,未定义,“”....它的工作原理与if(val)相同,但我用它来表示val不是bool。 –