我想知道是否有人可以帮助我...不幸的是我没有任何Javascript知识,并且发现它有点难以理解。
我正在处理酒店预订表格,这是我需要做的。您可以选择酒店以及需要多少晚的选项。
还有一个Totals字段。这是我被困的地方。有人可以帮我写一个剧本或做什么让Total字段显示夜间公式选择酒店的公式总数?
这也需要是一个值,它会与其他值一起发布到php表单,而php表单又会向我发送包含值的电子邮件。
以下是我所写表单的链接:https://www.alpinemalta.net/libyabuild2013/bookNow.html
感谢任何可以帮助我的人,请原谅我在这方面缺乏知识。
此致
Chris Brown(马耳他)
答案 0 :(得分:2)
看着你的表格,
1)我认为总共夜晚的下拉列表是多余的(从抵达和离开日期算起的总夜数)
2)日期(为了在JavaScript中使用它更简单)使用数值而不是:'11 / 05/2013(A)'等。
<select name="ArrivalDate" size="1" id="ArrivalDate">
<option>Please select</option>
<option value="1368399600">13-05-2013</option>
<option value="1368486000">14-05-2013</option>
...
</select>
3)我没有注意到每晚的价格?也许酒店列表也可以包含一些ID(例如h1a,h1b,h2a,h3a,h3b,h3c,...)而不是文本选项描述(酒店和房间)
<select name="hotel_choice" id="hotel5">
<option value="nothing" selected="selected">None Selected</option>
<option value='nothing'>.</option>
<option value="h1a">Corinthia Single Room</option>
<option value="h1b">Corinthia Double Room</option>
<option value='nothing'>.</option>
...
</select>
如果您这样做,那么JavaScript可能不会那么复杂(假设您进行了这些更改,并且不介意在页面源中看到每个酒店的价格):
<script type='text/javascript'>
var prices={nothing:0,h1a:357,h1b:280.50,h2a:380}; //here are your hotel prices
function calculate() {
var days = Math.round( (
document.getElementById('datedepart').value -
document.getElementById('ArrivalDate').value
) / 86400 ); //timestamp is in seconds
document.getElementById('total_cost').value =
days *
prices[ document.getElementById('hotel5').value ];
}
</script>
请注意,代码中没有任何细节,它基于这样的假设,即日期更改为其代表性整数值(例如由php函数time()返回)也有可能是在元素的ID名称中出错
然后剩下的就是连接“calculate();” javascript函数到 onchange 所有控件的事件,你就完成了。
<select name="hotel_choice" id="hotel5" onchange='calculate();'>
...
</select>
和
<select name="ArrivalDate" size="1" id="ArrivalDate" onchange='calculate();'>
...
</select>
和出发日期选择器中的相同。
编辑:
您可以在日期选择器中使用日期,但您必须使用以下内容将该字符串解析为数字客户端:
var dt=Date.parse(document.getElementById('ArrivalDate').value);
但请确保检查此功能支持的日期格式,并注意它返回自1970年以来毫秒的数量,因此您必须除以86400000而不是86400
编辑 - 检查日期是否填写
function calculate() {
var dd=document.getElementById('datedepart');
var da=document.getElementById('ArrivalDate');
var total=document.getElementById('total_cost');
var hotel=document.getElementById('hotel5');
//no hotel room selected or not depart date set or not arrival date set
//or departing before arrival (nonsense) - set total to ZERO and exit the function
if ( !(dd.value*1) || !(da.value*1) || da.value>dd.value ) {
total.value='0';//you can set it to 'not allowed' also if you wish (instead of '0')
return;
}
var days = Math.round( (
dd.value -
da.value
) / 86400 ); //timestamp is in seconds
var cost = days * prices[ hotel.value ];
if (isNaN(cost))
cost = 0; //or set to "invalid input" - but this line should not be needed at this point
total.value = cost;
}