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) ;

// 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 を投稿できます。

前もって感謝します :

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 をオーバーロードすると、奇妙な動作になる可能性があります (Hoisting http://www.adequalygood.com/JavaScript-Scoping-and-Hoisting.htmlを参照)。

質問に戻ると、getBaB.value の呼び出しは、「value」という属性を持つオブジェクトが割り当てられた変数として getBaB を呼び出していることを意味します。

あなたのコードでは、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 には数値が割り当てられており、「値」属性を持つオブジェクトではないことを意味します。

興味深いことに、getBaB() は、BaB = 0 をオーバーライドするため、値が見つからない場合は「 undefined 」を返し、「charbab」に値が設定されていない場合は「 null」を返す可能性があります (緩い型;))。theForm.elements["charbab"];

そのため、basebab が論理値を返すことを確認して、簡単な if ステートメントでコードが確実に動作するようにすることをお勧めします。

お役に立てれば。

GW

于 2013-04-29T11:02:40.830 に答える
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 に答える