性格悪い人が優勝

JSPファイルにて入力した値から最大値を求めるプログラムを作りたいのですが、
うまくJavaScriptが反応してくれません。

どこが間違っているのでしょうか?

下にソースコードを貼っておきます。

<%@ page contentType="text/html; charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
<title>
kadai
</title>
</head>
<body>
<input type="text" name="value" size=3 />
<input type="text" name="value" size=3 />
<input type="text" name="value" size=3 />
<input type="text" name="value" size=3 />
<input type="text" name="value" size=3 />
<button id="bt">最大値</button><span id="a"></span><br/>
<script type="text/javascript"><!--
var anchors = document.getElementsByTagName('value');
var bt=document.getElementById("bt");
var a=document.getElementById("a");
function max(){
var max = anchors[0];
for (var i=0, len=anchors.length; i<len ;i++) {
if (max < anchors[i]) {
max = anchors[i];
}
}
}
bt.addEventListener('click', max, false);
// --></script>
</body>
</html>

A 回答 (1件)

こんにちは



課題のようなので、ヒントのみです。

>document.getElementsByTagName('value');
では、<value>という名称のタグを取得しようとしますが、存在しませんよね?
それなので、要素リストの数(length)は0となり、関数max内のループも処理されません。

>var a=document.getElementById("a");
全体の中で、変数aを利用していないので、あっても意味がないのでは?

>var max = anchors[0];
anchorsには入力ボックスの要素リストを取得する予定だと想像しますが、その際はmaxには最初の要素が代入されます。(要素そのもので、入力された値ではない)
あとで比較していることから、取得したいのではないでしょうか?
値を得たい場合は、要素のvalue属性を取得してください。

>if (max < anchors[i])
上述のようにanchors[i]は「要素」ですので、大小の比較をすることに意味はありません。
要素の値を比較するように修正したとして・・・
通常、入力ボックスの値は文字列として取得されます。
文字列としての比較はもちろん可能ですが、「最大値を求めるプログラム」というのは多分数値としての最大値を選求めたいのだと想像しますので、文字列での比較とは結果が異なってしまいそうです。
入力値を、明示的に数値化しておく方がよろしいかと。
(cf. Number、parseFloat、pareseInt 等)

その他
・入力項目が5個ありますが、空欄がある場合でも全部を比較の対象としてしまいます。
 何らかの工夫が必要ではないでしょうか?
 (ケースによっては正しい結果が得られません)
・ちゃんと計算できたとして、ご提示の内容では「計算したら終了」となっているので、見た目には何の変化もありません。(人間にとっては処理していないのと同じ)
結果をどこかに表示するなどの処理が必要ではないでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!