简体   繁体   English

如果未选择单选按钮,如何修复警报?

[英]How to fix alert if no radio button is selected?

The problems:问题:

  1. Alert box when a radio button is not selected, it does not work properly.未选中单选按钮时的警报框无法正常工作。
  2. After clicking on submit button, the 'cost' in the alert box says NaN, which I don't want.单击提交按钮后,警报框中的“成本”显示 NaN,这是我不想要的。

And try to keep the HTML code as provided below as much as possible.并尽量保留下面提供的 HTML 代码。

 function calculateCost() { var radioButton; var pet; var colour; var cost = 0; var selectedPet = ["Cat", "Dog", "Rabbit"]; var selectedColour = ["Black", "Gold", "White"]; for (var i = 1; i <= 3; i++) { radioButton = document.getElementById(selectedPet[i - 1]); if (radioButton.checked == true) { pet = selectedPet[i - 1]; cost += parseInt(radioButton.value); //alert(parseInt(radioButton.value)); } else if (document.getElementById(selectedPet[i]).null); alert("You did not select a pet") } for (var i = 1; i <= 3; i++) { radioButton = document.getElementById(selectedColour[i - 1]); if (radioButton.checked == true) { colour = selectedColour[i - 1]; cost += parseInt(radioButton.value); //alert(parseInt(radioButton.value)); } else if (document.getElementById(selectedColour[i]).null); alert("You did not select a colour") } cost = selectedPet.value * selectedColour.value; alert("You have selected a " + pet + " and the colour selected was " + colour + ", the total cost is $" + cost); }
 <h1> Adopt a pet </h1> <form> <p>Choose a type of pet: <br> <input type="radio" id="Cat" name="pet" value="200"><label for="cat">Cat</label> <br> <input type="radio" id="Dog" name="pet" value="200"><label for="dog">Dog</label> <br> <input type="radio" id="Rabbit" name="pet" value="20"><label for="rabbit">Rabbit</label> <br> </p> <p>Choose the colour of pet: <br> <input type="radio" id="Black" name="colour" value="80"><label for="black">Black</label> <br> <input type="radio" id="Gold" name="colour" value="100"><label for="gold">Gold</label> <br> <input type="radio" id="White" name="colour" value="90"><label for="white">White</label> <br> </p> <p><input type="button" value="Submit" onClick="calculateCost();"> </form>

Here's a solution with no modifications to your HTML and no loops needed.这是一个无需修改 HTML 且无需循环的解决方案。

The code should be pretty self-explanatory.代码应该是不言自明的。 Let me know if you need any help!如果您需要任何帮助,请告诉我!

 function calculateCost() { var pet = document.querySelector('input[name="pet"]:checked'); var colour = document.querySelector('input[name="colour"]:checked'); if (pet && colour) { alert("You have selected a " + pet.id + " and the colour selected was " + colour.id + ", the total cost is $" + pet.value * colour.value + "."); } else if (!pet && colour) { alert('You did not select a pet.'); } else if (pet && !colour) { alert('You did not select a colour.'); } else { alert('You did not select a pet or colour.'); } }
 <h1> Adopt a pet </h1> <form> <p>Choose a type of pet: <br> <input type="radio" id="Cat" name="pet" value="200"><label for="cat">Cat</label> <br> <input type="radio" id="Dog" name="pet" value="200"><label for="dog">Dog</label> <br> <input type="radio" id="Rabbit" name="pet" value="20"><label for="rabbit">Rabbit</label> <br> </p> <p>Choose the colour of pet: <br> <input type="radio" id="Black" name="colour" value="80"><label for="black">Black</label> <br> <input type="radio" id="Gold" name="colour" value="100"><label for="gold">Gold</label> <br> <input type="radio" id="White" name="colour" value="90"><label for="white">White</label> <br> </p> <input type="button" value="Submit" onClick="calculateCost();"> </form>

The problem is that your alert for not selecting a pet is inside of your loop that checks the radio button checks.问题是您未选择宠物的警报位于检查单选按钮检查的循环 If I select dog , when it loops over cat , it evaluates to false.如果我选择dog ,当它遍历cat ,它的计算结果为 false。 Instead of running the else if inside your for loop, simply check whether pet and colour are set after the loop has ended (they're not set by default).不要在for循环中运行else if ,只需检查循环结束后是否设置了petcolour (默认情况下它们未设置)。

As for your cost returning NaN , that was because you were trying to grab the value of the array, rather than the element.至于返回NaN的成本,那是因为您试图获取数组的值,而不是元素。 It would actually make more sense to treat these as separate values, so I've created two new variables to handle this - selectedPetCost and selectedColourCost .将它们视为单独的值实际上更有意义,因此我创建了两个新变量来处理此问题 - selectedPetCostselectedColourCost

Finally, you'll probably only want to output the total assuming both options are selected.最后,假设两个选项都被选中,您可能只想输出总数。 I've done this with if (pet && colour) in my following example:我在以下示例中使用if (pet && colour)完成了此操作:

 function calculateCost() { var radioButton; var pet; var colour; var cost = 0; var selectedPet = ["Cat", "Dog", "Rabbit"]; var selectedColour = ["Black", "Gold", "White"]; var selectedPetCost; var selectedColourCost; for (var i = 1; i <= 3; i++) { radioButton = document.getElementById(selectedPet[i - 1]); if (radioButton.checked) { pet = selectedPet[i - 1]; selectedPetCost = parseInt(radioButton.value); //alert(parseInt(radioButton.value)); } } if (!pet) { alert('No pet selected!'); } for (var i = 1; i <= 3; i++) { radioButton = document.getElementById(selectedColour[i - 1]); if (radioButton.checked == true) { colour = selectedColour[i - 1]; selectedColourCost = parseInt(radioButton.value); //alert(parseInt(radioButton.value)); } } if (!colour) { alert('No colour selected!'); } if (pet && colour) { cost = selectedPetCost * selectedColourCost; alert("You have selected a " + pet + " and the colour selected was " + colour + ", the total cost is $" + cost); } }
 <h1> Adopt a pet </h1> <form> <p>Choose a type of pet: <br> <input type="radio" id="Cat" name="pet" value="200"><label for="cat">Cat</label> <br> <input type="radio" id="Dog" name="pet" value="200"><label for="dog">Dog</label> <br> <input type="radio" id="Rabbit" name="pet" value="20"><label for="rabbit">Rabbit</label> <br> </p> <p>Choose the colour of pet: <br> <input type="radio" id="Black" name="colour" value="80"><label for="black">Black</label> <br> <input type="radio" id="Gold" name="colour" value="100"><label for="gold">Gold</label> <br> <input type="radio" id="White" name="colour" value="90"><label for="white">White</label> <br> </p> <p><input type="button" value="Submit" onClick="calculateCost();"> </form>

Hope this helps!希望这可以帮助! :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM