クイズの国名を生成する次の関数があります。配列からランダムな名前を生成して画面に表示した後、質問が重複しないように削除したいと考えています。誰かが、私が今まで使ったことのないコードに示されている方法で splice を使用することを提案したので、うまく機能しない理由がわかりません。何が問題なのかを見つけるのを手伝ってもらえますか? ありがとう!コードは次のとおりです。
<div>
<div style="float:left">
<h1> <span id="questionnum"></span>. Can you locate <span id="countryquestion"></span> on the map?</h1>
</div>
<script type="text/javascript">
generateCountry();
function generateCountry(){
filenames = [ "Albania", "Andorra", "Armenia", "Austria", "Azerbaijan", "Belarus", "Belgium", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Georgia", "Germany", "Greece", "Hungary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "FYROM", "Malta", "Moldova", "Monaco", "Montenegro", "The Netherlands", "Norway", "Poland", "Portugal", "Romania", "Russia", "San Marino", "Serbia", "Slovakia", "Slovenia", "Spain", "Sweden", "Switzerland", "Ukraine", "United Kingdom" ];
filename = filenames.splice(Math.floor(Math.random()*filenames.length), 1);
document.getElementById('countryquestion').textContent = filename[0];
}
</script>
ルイのために編集
そうです..以下のように document.write を getelementById に置き換えたところ、何らかの競合が発生しています。
document.getElementById('countryquestion').textContent = filename;
この関数と別の関数を使用して、ユーザーが地図上で正しい国をクリックしたかどうかを確認します。コードを追加すると、最初の国名が表示され、地図をクリックしても何も起こりません。応答がなく、関数がおそらく再度呼び出されないため、国名は同じままです。グーグルマップから国名を取得する関数です。ファイル名(あなたのrandElement)とGoogleマップの国とを比較し、答えが正しいか間違っているかをgenerateCountry()に電話する必要がありますが、これは現在起こっていません..なぜですか?
function getCountry(latLng) {
geocoder.geocode( {'latLng': latLng},
function(results, status) {
if(status == google.maps.GeocoderStatus.OK) {
if(results[0]) {
for(var i = 0; i < results[0].address_components.length; i++) {
if(results[0].address_components[i].types[0] == "country") {
if(results[0].address_components[i].long_name == **filename**) {
right();
generateCountry();
numQuestions();
updateScore();
countRights();
showProgress();
} else {
wrong();
updateLives();
generateCountry();
numQuestions();
showProgress();
}
}
}
}
else {
alert("No results");
}
}
else {
water();
}
}
);
}