这里有一些问题,但让我们从与您的代码无关的问题开始。在 JSFiddle 中,您可以选择放置 javascript 的位置 - 默认设置是onload
在原始 jsfiddle 的输出中生成的 javascript 如下所示:
$(window).load(function(){
function amtcal(id)
{
var ntwt=$("#a1").val();
var rval=$("#aa1").val();
var product=rval*ntwt;
$("#baa1").val(product);
}
});
这意味着您的函数在该窗口加载函数的范围内,因此完全无法从 DOM 访问。因此错误:
ReferenceError:未定义 amtcal
这可以通过选择左侧的“No wrap - in head”来解决。
那么您的实际代码有什么问题?一个容易发现的问题是您正在使用 jQuery 阅读两个可编辑文本框的内容:
var ntwt=$("#a1").val();
var rval=$("#aa1").val();
没关系,但是文本框返回字符串,并且字符串不能相乘,所以你必须将它们转换为数字。我假设你想要整数:
var ntwt= parseInt($("#a1").val(),10);
var rval= parseInt($("#aa1").val(),10);
此时它可以工作,只要您先编辑第二个文本框。您需要从两个文本框中调用相同的函数:
<input placeholder="Net Wt" id="a1" onchange="amtcal(this.id)">
<input id="aa1" placeholder="Rate" style="width:50px;" onchange="amtcal(this.id)">
此时一切正常:http: //jsfiddle.net/8JA4s/
但是,您正在混合使用 jQuery 和 vanilla javascript/DOM。通常更容易坚持使用其中一种来避免混淆。
执行此操作的典型方法是使用 jQuery 附加事件处理程序.on
$('#a1, #aa1').on('change',function(){
var ntwt=parseInt($("#a1").val(),10);
var rval=parseInt($("#aa1").val(),10);
var product=rval*ntwt;
$("#baa1").val(product);
});
当然,这样做时,您会删除 DOM 中的事件处理程序。这应该放在onLoad
jsfiddle 中才能工作:http: //jsfiddle.net/8JA4s/2/