0

コードは、変数 id が 9 に等しい場合を除いて、すべての領域と図に対して機能します。その場合、#10 画像 (#9 インデックス) は表示されず、代わりに未定義のメッセージが書き込まれます。id が他の数値と等しい場合、checkAnswer() 関数は、クリックされたすべての領域に対して正しいか間違っているかを警告します。ただし、何も警告しない #10 領域は除きます。コードの何が問題になっていますか? (画像はすべて正しくディレクトリにあります)

<!doctype html>
<html>
<head>

<script type="text/javascript">

var cobras=new Array();

cobras[0] = '<img src="cobra1.jpg">';
cobras[1] = '<img src="cobra2.jpg">';
cobras[2] = '<img src="cobra3.jpg">';
cobras[3] = '<img src="cobra4.jpg">';
cobras[4] = '<img src="cobra5.jpg">';
cobras[5] = '<img src="cobra6.jpg">';
cobras[6] = '<img src="cobra7.jpg">';
cobras[7] = '<img src="cobra8.jpg">';
cobras[8] = '<img src="cobra9.jpg">';
cobras[9] = '<img src="cobra10.jpg">';
cobras[10] = '<img src="cobra11.jpg">';
cobras[11] = '<img src="cobra12.jpg">';
cobras[12] = '<img src="cobra13.jpg">';
cobras[13] = '<img src="cobra14.jpg">';
cobras[14] = '<img src="cobra15.jpg">';



id=Math.floor(Math.random()*15); 

function makeDisappear() {
var elem = document.getElementById("main");
elem.style.visibility = "hidden";
var elem = document.getElementById("empty");
elem.style.visibility = "visible";

var bodyE1 = document.body;
bodyE1.innerHTML += cobras[id];

}


function checkAnswer(a) {
if (a==id) {
    alert('Correct!')
    }
else {
    alert('Wrong!')
    }
}


</script>

</head>
<body>


<center> <button onclick="makeDisappear();"> Hide </button> </center>

<center> <img id="main" src="..\images\cobra.jpg" width="941" height="689" alt="Todos os bichos."> </center>
<center> <img style="visibility: hidden;" id="empty" src="..\images\vazio.jpg" width="941" height="689" alt="Vazio." usemap="#empty"> </center>


<map name="empty">
  <area shape="rect" coords="0,230,190,40" alt="1" onclick="checkAnswer(1)">
  <area shape="rect" coords="191,230,380,40" alt="2" onclick="checkAnswer(2)">
  <area shape="rect" coords="381,230,570,40" alt="3" onclick="checkAnswer(3)">
  <area shape="rect" coords="571,230,760,40" alt="4" onclick="checkAnswer(4)">
  <area shape="rect" coords="761,230,941,40" alt="5" onclick="checkAnswer(5)">
  <area shape="rect" coords="0,470,190,240" alt="6" onclick="checkAnswer(6)">
  <area shape="rect" coords="191,470,380,240" alt="7" onclick="checkAnswer(7)">
  <area shape="rect" coords="381,470,570,240" alt="8" onclick="checkAnswer(8)">
  <area shape="rect" coords="571,470,760,240" alt="9" onclick="checkAnswer(9)">
  <area shape="rect" coords="761,470,941,689" alt="10" onclick="checkAnswer(10)">
  <area shape="rect" coords="0,490,190,689" alt="11" onclick="checkAnswer(11)">
  <area shape="rect" coords="191,490,380,689" alt="12" onclick="checkAnswer(12)">
  <area shape="rect" coords="381,490,570,689" alt="13" onclick="checkAnswer(13)">
  <area shape="rect" coords="571,490,760,689" alt="14" onclick="checkAnswer(14)">
  <area shape="rect" coords="761,490,941,689" alt="15" onclick="checkAnswer(15)">

</map>

</body>
</html>
4

1 に答える 1

-1

実際にアイテム #9 でのみ発生している場合は、何らかの種類の数値対文字列の問題を示唆しています。

最初に「id」の変数名を別の名前に変更します。その名前は問題を引き起こす可能性があります。

次に、cobras 配列で行っているのと同じように、var を使用して先頭で宣言します。

「id」を文字列に変更し、parseInt を使用して Math 関数の結果を変換します。

配列に指定するインデックス値も文字列に変更して、代わりにキーになるようにします。

次に、area タグからの checkAnswer 呼び出しで指定された値を一重引用符で囲みます。

これで問題が解決するという保証はありませんが、少なくとも、ランダムな項目と選択された項目がすべて文字列であることは確かです。

于 2013-07-21T02:59:13.430 に答える