0

私はJavaScriptと初心者プログラマーに慣れていないので、これは答えるのが本当に簡単な質問かもしれません。x個のフィールドの値をループして合計し、合計を最終フィールドに表示したいと思います。各フィールドを明示的に呼び出すとこの関数を実行できますが、これを抽象化して、柔軟な数のフィールドを処理できるようにします。これが私が思いついたサンプルコードです(それは私にとってはうまくいきません)。どこが間違っているのですか?

<html>
<head>
<script type="text/javascript">
function startAdd(){
    interval = setInterval("addfields()",1);
}
function addfields(){
    a = document.addition.total.value;
    b = getElementByTagName("sum").value;
    for (i=0; i<=b.length; i++){
        a+=i;
    }
    return a;
}
function stopAdd(){
    clearInterval(interval);
}
</script>
</head>

<body>

<form name="addition">

 <input type="text" name="sum" onFocus="startAdd();" onBlur="stopAdd;">
+ <input type="text" name="sum" onFocus="startAdd();" onBlur="stopAdd;">
= <input type="text" name ="total">

</form>

</body>
</html>
4

3 に答える 3

1

あなたのコードには2つの問題があります。

最初の1つ:

b = getElementByTagName("sum").value;

あなたはおそらくそうするつもりですgetElementsByTagName(余分に注意してくださいs)。また、<sum>結果が得られないため、要素がありません。これは問題です。最後に、各要素のプロパティの配列ではなく、配列のプロパティを.value返しvalueます (何も存在しないため、 が返されます)。undefinedvalue

これらの問題を解決するには、次のように記述します。

inputElements = getElementsByTagName('input');
sumValues = [ ];

for(i = 0; i < inputElements.length; ++i) {
    if(inputElements[i].name == 'sum') {
        sumValues.push(inputElements[i].value);
    }
}

またはjQueryで:

sumValues = $('input[name=sum]').map(function() {
    return this.value;
});

2番目のもの:

for (i=0; i<=b.length; i++){

b.length要素数を記述します。を使用すると、存在しない<=にアクセスします。b[b.length]までアクセスしたいので、これを記述する最も慣用的な方法は、 の代わりにb[b.length - 1]使用する条件を書き直すことです。あれは:<<=

for(i = 0; i < b.length; ++i) {
于 2010-04-01T00:05:18.987 に答える
0

コードには「sum」という名前のタグはありません。getElementsByTagName('input')入力タグでクラス属性を使用してから、関連するクラスがあることを使用して確認することをお勧めします。jQueryは、特定のクラスを持つすべての要素を1行で選択できるため、これを大幅に簡素化します$(".className")。jQueryが必要ない場合は、この質問が役立つかもしれません。

于 2010-04-01T00:00:34.787 に答える
0

jQuery ライブラリを使用し、パターン マッチを実行して追加するすべての要素を取得し、それを出力フィールドに入力します。

于 2010-04-01T00:03:03.533 に答える