Javascript没有从我的函数返回结果

时间:2017-09-30 18:27:33

标签: javascript

我做了一个类似的帖子,但没有得到我的答案或我的代码工作,所以我决定使用切换功能到if功能,这就是它!

function taxesrepas(option){
    var soustot;
    var taxes;
    var total;
    var soustot;

    if (option = getelementbyid("spaghetti")) 
        total += 9.62;
        taxes += 0.67;
        soustot +=8.95;

    if (option = getelementbyid("lasagne"))
        total += 10.70;
        taxes += 0.75;
        soustot += 9.95;

    if (option = getelementbyid("salade"))
        total +=  6.30;  
        taxes += 0.45;
        soustot += 5.95;
    if (option =getelementbyid("escargot"))
        total += 5.32;
        taxes += 0.37;
        soustot += 4.95;

        document.getElementById("taxes").innerHTML = taxes;
        document.getElementbyid("total").innerHTML = total;
        document.getElementbyid("soustot").innerHTML = soustot;
      }

该功能是从选择菜单中返回税金和总金额。 这是我希望我的结果被打印的地方,但它们只是不打印,我现在尝试使用开关,如果我真的疯了。

<h3 id="choix"></h3>
<h3 id="taxes" onclick= "taxesrepas(this.value)">taxes:</h3>
<h3 id="soustotal" onclick= "taxesrepas(this.value)">Sous-total:</h3>
<h3 id="total"onclick= "taxesrepas(this.value)">Total:</h3>

2 个答案:

答案 0 :(得分:1)

您的代码中存在大量语法错误。我建议您浏览网页以获取基本教程。

  
      
  1. 您没有初始化变量:
  2.   
var taxes;
var total;
var soustot;

调用total += 9.62是一个错误,因为undefined加上一个数字是NaN

  
      
  1. 如果条件
  2. ,您正在使用=分配而不是==比较   

应为if(somevariable == somevalue)而不是if(somevariable = somevalue)

  
      
  1. 您没有用花括号{}
  2. 附上if语句   
if(somevariable == somevalue)
   dosomething1(); // your if statement only includes up to this part
   dosomething2(); // this line does not belong to the if statement
你应该:

if(somevariable == somevalue) { //opening here
   dosomething1();
   dosomething2();
} //closing here
  
      
  1. 到底是什么getelementbyid("spaghetti")。你在哪里定义了一个名为getelementbyid的函数?

  2.   
  3. 它是document.getElementById而非document.getElementByid您使用了小 i

  4.   
  5. 当您想要在选择了某个选项后更改这些元素时,您正在将<h3>元素视为按钮吗?

         
        
    • 您要添加onclick属性。这应该是onClick
    •   
    • 您正在将this.value传递给您的函数。您应该this.innerHTML而不是
    •   
  6.   

然而, 我强烈反对你做这样的事情。

如果要将侦听器添加到特定元素,请在JavaScript中执行。是的,添加onClick内联事件是有效的,但它要求您将JS行为添加到HTML中。还有一个原因是在JS中编写事件可以使其很容易维护。

您可以尝试:

document.getElementById('total').onClick = somefunction

无论如何,这是我能想到的最少的。

据说您有<select>包含您的选项,然后在选择选项时,您会看到价格。 (然后意大利面喷在你的鼻子上)

&#13;
&#13;
var select = document.getElementById('optioncombo');

select.addEventListener('change', function() {
  taxesrepas(select.value);
});

function taxesrepas(option) {
  //you need to assign a starting value for your variables or you will get NaN when using +=
  var soustot = 0,
    taxes = 0,
    total = 0,
    soustot = 0;

  //getelementbyid is not a function!!!
  //if (option == getelementbyid("spaghetti")) {
  if (option == "spaghetti") {
    total += 9.62;
    taxes += 0.67;
    soustot += 8.95;
  }
  if (option == "lasagne") {
    total += 10.70;
    taxes += 0.75;
    soustot += 9.95;
  }

  if (option == "salade") {
    total += 6.30;
    taxes += 0.45;
    soustot += 5.95;
  }
  if (option == "escargot") {
    total += 5.32;
    taxes += 0.37;
    soustot += 4.95;
  }

  document.getElementById("choix").innerHTML = option;
  document.getElementById("taxes").innerHTML = taxes;
  document.getElementById("total").innerHTML = total;
  document.getElementById("soustotal").innerHTML = soustot;

}
&#13;
<label for="optioncombo">Product: </label><select id="optioncombo">
  <option value="none"></option>
  <option value="spaghetti">spaghetti</option>
  <option value="lasagne">lasagne</option>
  <option value="salade">salade</option>
  <option value="escargot">escargot</option>
</select>

<h3>Your choice is:</h3><span id="choix"></span>
<h3>taxes:</h3><span id="taxes"></span>
<h3>Sous-total:</h3><span id="soustotal"></span>
<h3>Total:</h3><span id="total"></span>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我不确定我是否正确理解了您的问题,但我认为,您希望根据选择的菜肴选项进行一些计算。您的代码中存在多个严重错误,并且应该研究如何使用JavaScript进行编码。这是一些错误,你做了:

  • 您需要注意区分大小写:getelementbyidgetElementById不同。
  • 作为另一个变量的属性的函数与全局函数不同:document.getElementByIdgetElementById
  • if语句之后省略大括号是危险的。它始终只会影响即将推出的产品线。始终在if语句中使用花括号。在您的情况下,只进行了第一次计算。 (if(...) { ... }
  • <h3>元素没有value,只有输入和广播框确实有value。因此,您不能将此“选项”作为参数传递。
  • 您试图绑定例如税收作为一个功能的选项,然后评估,如果它是一道菜(意大利面等)。这不能像这样工作。
  • 如果您想为现有号码添加号码,则只需要
  • +=。否则,您只需使用=
  • 即可
  • 使用=无法比较任何内容。该运算符用于分配变量。您需要使用==或更好===
  • 如果您只声明变量(例如使用var soustot;)而不初始化它(为其设置值),则其值为undefined。您无法向undefined添加号码。它将产生NaN值(不是数字)。
  • 如果要将某些输出直接作为JavaScript中的返回值,则专门使用从函数返回值的术语。实际上,您希望设置一些DOM值,而不是将值返回给函数的调用者。例如,Math.round(1.643);返回2但不设置任何DOM属性。

尽管如此,这里有一个有效的例子:

function taxesrepas() {
  var soustot = 0;
  var taxes = 0;
  var total = 0;
  var soustot = 0;
  var selectedOption = document.selectionForm.selectionOption.value;

  if (selectedOption === 'spaghetti') { 
     total = 9.62;
     taxes = 0.67;
     soustot = 8.95;
  } else if (selectedOption === 'lasagne') {
     total = 10.70;
     taxes = 0.75;
     soustot = 9.95;
  } else if (selectedOption === 'salade') {
     total =  6.30;  
     taxes = 0.45;
     soustot = 5.95;
  } else if (selectedOption === 'escargot') {
     total = 5.32;
     taxes = 0.37;
     soustot = 4.95;
  }

  document.getElementById("taxes").innerHTML = taxes;
  document.getElementById("total").innerHTML = total;
  document.getElementById("soustot").innerHTML = soustot;
}
label { display: block; }
<div>
  Taxes: <span id="taxes"></span>
</div>
<div>
  Total: <span id="total"></span>
</div>
<div>
  Soustot: <span id="soustot"></span>
</div>

<hr>

<form name="selectionForm">
<label>
  <input type="radio" name="selectionOption" value="spaghetti">
  Spaghetti
</label>
<label> 
  <input type="radio" name="selectionOption" value="lasagne">
  Lasagne
</label>
<label> 
  <input type="radio" name="selectionOption" value="salade">
  Salade
</label>
<label>
  <input type="radio" name="selectionOption" value="escargot">
  Escargot
</label>
</form>

<button onclick="taxesrepas();">Calculate</button>