我一直在四处寻找,我似乎无法找出发生这种情况的原因或如何解决这个问题。我已经尝试了大约2天不同的事情,现在是时候先寻求帮助,然后再撕掉我的头发了(我是Java的新手)
我知道这段代码目前很长,但是为了便于阅读,可以看出它为什么不适合我。
function getBaB()
{
var BaB=0;
var theForm = document.forms["prrform"];
var basebab = theForm.elements["charbab"];
BaB = basebab.value;
return BaB;
}
var armour_types = new Array();
//这是不起作用的一点
armour_types["Heavy"] = (getBaB.value) ;
//它只返回undefined,如果我是parseInt,那么我得到NaN。我只是不明白为什么没有定义。
armour_types["Medium"] = 10;
armour_types["Light"] = 2;
armour_types["Adamantine"] = 10;
armour_types["Mithral"] = 5;
armour_types["Unarmoured"] = 0;
function calculateTotal()
{
var TotalPRR = getArmourType();
var divobj = document.getElementById('totalPRR');
divobj.style.display='block';
divobj.innerHTML = "Total PRR "+TotalPRR;
}
function hideTotal()
{
var divobj = document.getElementById('totalPRR');
divobj.style.display='none';
}
如果需要,我可以发布HTML。
提前致谢:
答案 0 :(得分:1)
Kirubhananth Chellam的回答是正确的:
armour_types["Heavy"] = getBaB();
但是,由于你是Javascript的新手(Java有一个非常不同的语法),我会尝试解释你出错的地方,看看我是否可以帮助你。
Javascript是松散的类型 - 这是整个语言的关键。考虑...
var x = 0;
...正如您想象的那样将值0赋给x。简单但是作为任务的关键起点...
x = "hello"
......理解起来并不那么简单。在强类型语言中,这将返回类型错误,但是Javasript,这是完全可以接受的。原样......
x = function(){
var y = 0;
return y;
}
...即使已为x分配了数值。
这一点很重要,因为在运行时解释Javascript时,函数声明如...
function x(){
...
}
...实际上与变量赋值的解释方式相同......即......
var x = function(){
...
}
...如果重载变量x,可能会导致奇怪的行为(请参阅提升http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html)。
回到你的问题,对getBaB.value的调用意味着你正在调用getBaB作为一个赋予一个名为'value'属性的对象的变量。
在您的代码中,Javascript将返回函数定义(在技术上是一个对象)作为值getBaB,它没有'value'属性,因此 undefined 。
注意:尝试将 undefined 解析为int奇怪地返回NaN(未定义)。
至于你的功能......
function getBaB()
{
var BaB=0;
var theForm = document.forms["prrform"];
var basebab = theForm.elements["charbab"];
BaB = basebab.value;
return BaB;
}
return BaB
不会返回一个对象,尽管你可能认为它确实存在。返回到松散类型的javascript; BaB = basebab.value;
表示BaB是指定的数值,而不是具有'value'属性的对象。
有趣的是,如果未找到theForm.elements["charbab"];
,则getBaB()仍然可以返回“ undefined ”,如果未在'charbab中设置值,则' null ' '因为它覆盖BaB = 0(松散类型;))。
因此我建议您确保basebab返回一个逻辑值,以确保您的代码使用快速if语句可靠地运行!
希望这会有所帮助。
GW
答案 1 :(得分:0)
你的方法调用是错误的。只需将方法称为methodname();
即可所以,在你的代码中
armour_types["Heavy"] = getBaB();
我会猜测。
答案 2 :(得分:0)
首先,getBAB()必须返回一个数组。我的代码示例如下
function BlockID() {
var IDs = new Array();
IDs[0] = "a";
IDs[1] = "b";
IDs[2] = "c";
IDs[3] = "d";
return IDs;
}
var isReady = true;
function doSaveAs(){
var armour_types = new Array();
armour_types["Heavy"] = BlockID();
}
<body>
<input type="button" onClick="doSaveAs();">click</input>
</body>