Can';不要让javascript工作(初学者)-请检查我的代码
我不熟悉脚本编写等,所以如果您能告诉我(a)我的代码不起作用的原因,以及(b)您能提供的任何其他有用提示,我将不胜感激。我相信原因很简单:)。很高兴收到任何反馈 我只是在设计一个基本的计算器——用户输入一只动物的体重、脱水程度和另一个数字,javascript进行一些计算以输出流体速率(用于计算流体应该以多快的速度流入生病的动物) 守则:Can';不要让javascript工作(初学者)-请检查我的代码,javascript,jquery,html,Javascript,Jquery,Html,我不熟悉脚本编写等,所以如果您能告诉我(a)我的代码不起作用的原因,以及(b)您能提供的任何其他有用提示,我将不胜感激。我相信原因很简单:)。很高兴收到任何反馈 我只是在设计一个基本的计算器——用户输入一只动物的体重、脱水程度和另一个数字,javascript进行一些计算以输出流体速率(用于计算流体应该以多快的速度流入生病的动物) 守则: $(文档).ready(函数(){ 编写(“此脚本正在运行”); //兽医计算器代码 //当bw、dh或ol发生变化时,更新维护、更换、每日要求和费率。 函
$(文档).ready(函数(){
编写(“此脚本正在运行”);
//兽医计算器代码
//当bw、dh或ol发生变化时,更新维护、更换、每日要求和费率。
函数updateDetails(){
//定义体重、脱水和持续损失的变量
变量$bw=$(“#体重”);
var$dh=$('脱水');
变量$ol=$(“#ongoingloss”);
变量$dr=$(“#每日需求”);
变量$repl=$(“#替换”);
var$rt=$(“#rate”);
var mt=(1.5*(70*(数学功率($bw.val,0.75));//维护要求
$dr.text(mt+‘ml/24小时’);
风险值代表=$bw*0.01*$dh;
$repl.text(rep+'ml');
风险值rt=((mt+rep+ol.val)/24);
$rt.text(rt+“ml/hr”);
}
//为输入元素添加事件侦听器
$bw.on('change',updateDetails());
$dh.on('change',updateDetails());
$ol.on('change',updateDetails());
}
兽医计算器
流体计算器
投入
体重(kg):
%脱水:
损失(ml):
每日需求:
替换:
速率(毫升/小时):
&副本;维特夏普私人有限公司2015年版权所有
您应该为事件处理程序提供函数引用。按如下方式修复代码:
$bw.on('change', updateDetails);
$dh.on('change', updateDetails);
$ol.on('change', updateDetails);
不同之处在于,updateDetails()
立即执行函数,并将未定义的
作为事件处理程序返回,因此基本上没有注册任何处理程序
另一个问题是,您需要将变量定义移到updateDetails
函数之外:
var $bw = $('#bodyWeight');
var $dh = $('#dehydration');
var $ol = $('#ongoingLosses');
var $dr = $('#dailyRequirement');
var $repl = $('#replacement');
function updateDetails() { ... }
从哪里开始
- 您缺少结束语
和)
代码>在您的文档之后。就绪
- 您正试图在函数中声明一个新函数
- 您正在尝试与旧版本的jquery一起使用
var
,但在var
未知(在函数范围之外)的情况下绑定了change
事件。因此,您必须在父作用域上声明这些内容,在您的情况下,父作用域位于函数外部.val()
,在jQuery中不是.val
.on()
方法中触发事件时,需要传递函数指针。它被称为事件处理程序。这与调用函数不同。所以是$bw.on('change',updateDetails)代码>非$bw.on('change',updateDetails())代码>
解决方案:
这就是你的脚本应该是什么样子
$bw = $('#bodyWeight');
$dh = $('#dehydration');
$ol = $('#ongoingLosses');
//update maint, replacement, dailyRequirement and rate when bw, dh or ol changes.
function updateDetails() {
// define variables for body weight, dehydration and ongoing losses
var $dr = $('#dailyRequirement');
var $repl = $('#replacement');
var $rt = $('#rate');
var mt = (1.5 * (70 * (Math.pow($bw.val(), 0.75)))); // maintenance requirement
$dr.text(mt + 'ml/24 hours');
var rep = $bw.val() * 0.01 * $dh.val();
$repl.text(rep + 'ml');
var rt = ((mt + rep + $ol.val())/24);
$rt.text(rt + "ml/hr");
}
// add event listeners for input elements
$bw.on('change', updateDetails);
$dh.on('change', updateDetails);
$ol.on('change', updateDetails);
$bw
、$dh
和$ol
在本地范围内。您无法在功能范围之外找到它们。你还需要在使用它们之前声明它们;在Javascript的末尾。也是$bw.val()
而不是$bw.val
您好,谢谢。你能解释一下原因吗?我只打算在该函数中使用这些变量——将变量保持在局部不是更好的做法吗?“我只打算在该函数中使用这些变量”,但您还希望将事件处理程序绑定到函数的外部。所以在这种情况下,你无论如何都需要他们在外面。一般来说,在这种情况下,最好在外部声明它们,以便在执行函数时不会在每个事件上重新计算它们。您好,您能解释一下“旧版本的jQuery”注释吗?我直接从jQuery站点使用1.11.2?您好,谢谢您的回答。我可以问一下,您遗漏了document.ready部分-我是否需要它,因为我已将脚本放在html文件的末尾?是的,您当然需要在html文件中使用它。但是在jsFiddle
中,他们在内部将您的所有代码放在document.ready(function(){})中代码>。所以你不需要它。这意味着在jsFiddle
中,您的所有代码都在文档准备好后开始工作。奇怪的是,当我跟随您到jsFiddle的链接时,代码在那里工作(尽管我需要对其进行大量润色),但是当我将代码复制并粘贴到我的文件中(这些文件仅存储在我的计算机本地)时,它们不工作。有什么想法吗?