好。所以我正在为英制和公制制作BMI计算器。该公式有效,当它不是表格时,文本会显示,但我需要将其放入要验证的表格中 - 这就是我的问题所在。提交按钮似乎只是刷新页面而不是显示文本。我不确定我应该添加什么,所以它只显示文本而不是刷新整个页面。
我的JS -
$(function(calculateBMI) {
// when the text field gets focus it gets ride of the default value
//:text makes the browser check for ALL text fields
$(':text').focus(function() {
console.log('got focus');
var field = $(this);
//basically asks - is it blank? if not, put default value in
if (field.val()==field.prop('defaultValue')) {
field.val('');
}
});
$(':text').blur(function() {
console.log('lost focus');
var field = $(this);
//basically asks - is it blank? if not, put default value in
if (field.val()=='') {
field.val(field.prop('defaultValue'));
}
});
$('#imperialunits').validate();
$('#metricunits').validate();
}); // end ready
function bmiCalcI(){
var iHeightFeet=Number(document.getElementById("iHeightFeet").value);
var iHeightInch=Number(document.getElementById("iHeightInch").value);
var iHeight=(iHeightFeet * 12)+iHeightInch;
var iWeight=Number(document.getElementById("iWeight").value);
var calcI_1=iWeight * 703;
var calcI_2=iHeight * iHeight;
var calcI_3=Math.round(calcI_1 / calcI_2);
$("#outputI").text("Your BMI is: " + calcI_3);
}
function bmiCalcM(){
var mHeight=Number(document.getElementById("mHeight").value);
var mWeight=Number(document.getElementById("mWeight").value);
var calcM_1=mHeight / 100
var calcM_2=calcM_1 * calcM_1;
var calcM_3=Math.round(mWeight / calcM_2);
$("#outputM").text("Your BMI is: " + calcM_3);
}
</script>
我的HTML
<div class="results">
<div id="imperialunits tabs-1" class="calc">
<h3>Imperial Units</h3>
<p>Height:</p>
<form id="imperial">
<input type="text" id="iHeightFeet" value="ft" class="required digits">
<input type="text" id="iHeightInch" value="in" class="required digits">
<p>Weight:</p>
<input type="text" id="iWeight" value="lbs" class="required digits">
<input type="submit" value="bmiCalcI" onclick="bmiCalcI();">
<div id="outputI"></div>
</form>
</div>
<div id="metricunits tabs-2" class="calc">
<h3>Metric Units</h3>
<form id="metric">
<input type="text" id="mHeight" value="cm" class="required digits">
<p>Weight:</p>
<input type="text" id="mWeight" value="kg" class="required digits">
<input type="submit" value="bmiCalcM" onclick="bmiCalcM();">
<div id="outputM"></div>
</form>
</div>
</div>
答案 0 :(得分:1)
正在发生的事情是您已将按钮定义为type="submit"
,这意味着点击后他们将提交表单。当表单没有定义任何操作时,它只是刷新页面 - 当发生这种情况时,页面将恢复到其初始状态。
你有几个选择。
最简单的选择是将按钮从input
更改为button
元素
<button type="button" onclick="bmiCalcM();">Calculate</button>
您还可以在on form
元素上添加onsubmit以防止刷新
<form id="metric" onsubmit="return false;">
您也可以使用event.preventDefault()
函数 - jQuery解决方案可能看起来像
$('#metric').submit(function (e) {
e.preventDefault();
var mHeight=Number(document.getElementById("mHeight").value);
var mWeight=Number(document.getElementById("mWeight").value);
var calcM_1=mHeight / 100
var calcM_2=calcM_1 * calcM_1;
var calcM_3=Math.round(mWeight / calcM_2);
$("#outputM").text("Your BMI is: " + calcM_3);
});
这些将取代您的计算功能,因此如果您想选择此解决方案,还需要删除提交按钮中的onclick。
答案 1 :(得分:0)
你应该打电话给&#34;返回false&#34;功能如果您不需要刷新页面。 试试这个
<input type="submit" value="bmiCalcM" onclick="return bmiCalcM();">
更改你的函数bmiCalcM()如下:
function bmiCalcM(){
var mHeight=Number(document.getElementById("mHeight").value);
var mWeight=Number(document.getElementById("mWeight").value);
var calcM_1=mHeight / 100
var calcM_2=calcM_1 * calcM_1;
var calcM_3=Math.round(mWeight / calcM_2);
$("#outputM").text("Your BMI is: " + calcM_3);
return false;
}
添加&#34;返回false;&#34;最后。
希望有所帮助