我在合并HTML和JavaScript时遇到问题

时间:2013-10-07 01:26:18

标签: javascript jquery html

我正在尝试创建一个模拟网页,该网页旨在使用HTML和Javascript在任何给定天数内返回租车费用。页面的HTML部分效果很好,但是当我按下按钮来计算总数时,它什么也没做。我已经浏览了互联网,希望找到这个问题的答案,但无论我尝试什么,似乎都不想工作。

这是我的代码的HTML部分,它正常工作

<form>
Name: <input type="text" name="name"><br>
Street Address: <input type="text" name="street">
City: <input type="text" name="city"><br>
State: <input type="text" name="state">
Zip Code: <input type="text" name="zip"><br>
Beginning Odometer Reading: <input type="text" name="odometerbegin">
Ending Odometer Reading: <input type="text" name="odometerend"><br>
Days of Use: <input type="number" name="days">
</form>

<button onclick="CarRentalTotals()">Click for Calculation</button>

以下是我尝试将程序打印出来的JavaScript部分 按下“Click for Calculation”按钮:

<script>
function CarRentalTotals() {

var name = document.getElementById('name').value;
var street = document.getElementById('street').value;
var city = document.getElementById('city').value;
var state = document.getElementById('state').value;
var zip = document.getElementById('zip').value;
var odometerbegin = document.getElementById('odometerbegin').value;
var odometerend = document.getElementById('odometerend').value;
var days = document.getElementById('days').value;
var MilesDriven = document.getElementById('MilesDriven').value;
MilesDriven = odometerend - odometerbegin;
var TotalCharge = document.getElementById('TotalCharge').value;
TotalCharge = days * 15 + MilesDriven * 0.12;

}
</script>

有些东西告诉我这是一个简单的解决方案,但我只是一个初学者,并且已经考虑了这段代码很长一段时间,但收效甚微,所以任何帮助都会受到赞赏。谢谢你的时间!

4 个答案:

答案 0 :(得分:2)

您没有为任何输入提供ID,但您使用“getElemementById”方法来获取其值。将您的HTML更改为:

<form>
    Name: <input type="text" id="name"><br>
    Street Address: <input type="text" id="street">
    City: <input type="text" id="city"><br>
    State: <input type="text" id="state">
    Zip Code: <input type="text" id="zip"><br>
    Beginning Odometer Reading: <input type="text" id="odometerbegin">
    Ending Odometer Reading: <input type="text" id="odometerend"><br>
    Days of Use: <input type="number" id="days">
</form>

此外,您正在尝试从“MilesDriven”和“TotalCharge”输入中获取值,这些输入未在HTML中定义。请改用以下JavaScript:

 function CarRentalTotals() {
        var name = document.getElementById('name').value;
        var street = document.getElementById('street').value;
        var city = document.getElementById('city').value;
        var state = document.getElementById('state').value;
        var zip = document.getElementById('zip').value;
        var odometerbegin = document.getElementById('odometerbegin').value;
        var odometerend = document.getElementById('odometerend').value;
        var days = document.getElementById('days').value;
        MilesDriven = odometerend - odometerbegin;
        TotalCharge = days * 15 + MilesDriven * 0.12;
        alert(TotalCharge);
   }

Updated Fiddle

如果您希望弹出消息说出除总数之外的其他内容。变化

alert(TotalCharge);

alert("Your total is $" + TotalCharge);

查看上面更新的小提琴链接

答案 1 :(得分:1)

如果没有真正查看代码,请更改此内容:

var TotalCharge = document.getElementById('TotalCharge').value;
TotalCharge = days * 15 + MilesDriven * 0.12;

到此

var TotalCharge = document.getElementById('TotalCharge');
TotalCharge.value = days * 15 + MilesDriven * 0.12;

对所有其他事件

执行相同操作

答案 2 :(得分:1)

要扩展qwertymk的答案,如果您的脚本的目标是显示ID为TotalCharge的HTML元素内的总费用,则需要相应地更新DOM。

目前您正在做的是创建一个设置为TotalCharge DOM对象的value属性的javascript变量TotalCharge。这将创建字符串值的副本,而不会将引用返回给DOM对象。当您稍后更改变量的值时,它不会反映在DOM中。

要实现这一点,你应该像qwertymk所说的那样 - 首先在你的变量中为DOM对象分配一个引用:

var TotalCharge = document.getElementById("TotalCharge");

此时,您可以根据引用的原因更改DOM对象的属性,这些更改将反映在您的页面上:

TotalCharge.value = // your expression

答案 3 :(得分:1)

确保调用您的函数

首先,请按照评论中的建议,通过在开头添加以下任一语句来确保调用您的函数:

function CarRentalTotals() {
  alert('CarRentalTotals called !');
  console.log('CarRentalTotals, called');
  ...

显示计算结果

然后,你必须对计算结果做些什么。让我们从功能结束时的另一个警告/ console.log开始:

  ...
  alert('MilesDriven = ' + MilesDriven + ', TotalCharge = ' + TotalCharge);
  console.log('MilesDriven = ' + MilesDriven + ', TotalCharge = ' + TotalCharge);
}

修复您的价值检索/计算代码

接下来,我们必须使这个计算工作。首先,您使用document.getElementById检索值,但只定义了name属性。你可以:

1)为每个字段添加id属性,例如

City: <input type="text" name="city" id="city"><br>

2)或将getElementById替换为getElementsByName

var city = document.getElementsByName('city')[0].value;

在页面上渲染结果

最后,您的计算以

结束
var MilesDriven = document.getElementById('MilesDriven').value;
MilesDriven = odometerend - odometerbegin;
var TotalCharge = document.getElementById('TotalCharge').value;
TotalCharge = days * 15 + MilesDriven * 0.12;

但是您在此处粘贴的HTML中未定义这两个元素。

如果要在HTML元素中显示这些值,则代码应如下所示:

var MilesDrivenElt = document.getElementById('MilesDriven');
MilesDrivenElt.value = odometerend - odometerbegin;
var TotalChargeElt = document.getElementById('TotalCharge');
TotalChargeElt.value = days * 15 + MilesDrivenElt.value * 0.12;

使用

Miles Driven: <input type="number" name="MilesDriven" id="MilesDriven"><br>
Total Charge: <input type="number" name="TotalCharge" id="TotalCharge"><br>

注意:这些元素没有义务<input> s。

最后一个提示:沿途调试代码

您应该使用web developer consoleconsole.log('message')方法。

顺便说一下,你在你的问题中添加了jQuery标签,但这里似乎没有使用jQuery。学习vanilla JavaScript / HTML很棒,但jQuery会让你的生活更轻松。