1

我一直在环顾四周,我似乎无法找出为什么会发生这种情况或如何解决它。我已经尝试了大约 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) ;

//它只是返回未定义,如果我 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。

提前致谢 :

4

3 回答 3

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 作为变量,该变量分配了一个具有名为“值”的属性的对象。

在您的代码中,Javascript 将函数定义(从技术上讲是一个对象)作为值 getBaB 返回,它没有 'value' 属性,因此是undefined

注意:尝试将undefined解析为 int 奇怪地返回 NaN(不是 undefined)。

至于你的功能...

  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 被分配了一个数值,而不是一个具有“值”属性的对象。

有趣的是,如果未找到getBaB() 仍然可以返回“ undefined ”,如果在“charbab”中未设置值,则 getBaB() 仍然可以返回“ null ”,因为它覆盖了 BaB = 0(松散类型;))。theForm.elements["charbab"];

因此,我建议您确保 basebab 返回一个逻辑值,以确保您的代码通过快速 if 语句可靠地运行!

希望这可以帮助。

GW

于 2013-04-29T11:02:40.830 回答
0

你的方法调用是错误的。只需将该方法称为 methodname();

所以,在你的代码中

  armour_types["Heavy"] = getBaB();

我猜会起作用的。

于 2013-04-29T10:23:59.943 回答
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>
于 2013-04-29T10:46:56.717 回答