アプリ版:「スタンプのみでお礼する」機能のリリースについて

FC2ブログの記事内でラジオボタンを設置して択一クイズが作りたいです。

下記のプログラムを、ブログパーツのフリーエリアに入力すると、サイドメニューでは正常に動作します。

しかし、記事内に入力すると、ラジオボタンにチェックは入れられるのですが、採点ボタンを押しても反応しません。

どうすれば、ブログの記事内で、動作するのでしょうか?また、下記のプログラムに限らず可能なものがあれば教えてください。

プログラムを公開されている方のホームページには、メールフォームやコメント欄がないので、直接伺うことができませんでした。http://www.pori2.net/js/form/4.html

宜しくお願いします。

<form name="radioB">
カナダの首都は?<br>
<input type="radio" name="Q1">オタワ<br>
<input type="radio" name="Q1">トロント<br>
<input type="radio" name="Q1">モントリオール<br>
<br>
スイスの首都は?<br>
<input type="radio" name="Q2">ジュネーブ<br>
<input type="radio" name="Q2">チューリッヒ<br>
<input type="radio" name="Q2">ベルン<br>
<br>
ドイツの首都は?<br>
<input type="radio" name="Q3">ハンブルク<br>
<input type="radio" name="Q3">ブレーメン<br>
<input type="radio" name="Q3">ベルリン<br>
<br>
スペインの首都は?<br>
<input type="radio" name="Q4">バルセロナ<br>
<input type="radio" name="Q4">マドリード<br>
<input type="radio" name="Q4">リスボン<br>
<br>
オーストラリアの首都は?<br>
<input type="radio" name="Q5">シドニー<br>
<input type="radio" name="Q5">メルボルン<br>
<input type="radio" name="Q5">キャンベラ<br>
<br>
<input type="button" value="採点" onclick="saiten()" />
</form>



<script>
function saiten(){

var seikai=0; //正解数を入れる変数

//答えの番号を配列に入れる
var trueAns = new Array(0,5,8,10,14);

//正解のラジオボタンがチェックされているか確認
for (i=0 ; i<5 ; i++)
{
if( document.radioB.elements[trueAns[i]].checked )
seikai++;
}

alert("あなたは"+seikai*20+"点でした!");
}
</script>

A 回答 (3件)

記事ごとに違う問題と回答なら、こんな感じでしょうか。


ポイントとしては、選択肢に値をつけることと、
関数 saiten の引数に対象フォームと回答を含めることです。

<script>
function saiten(name,answers){
var readRadio = function(radios) {
for (var d = 0; d < radios.length; d++ ) if (radios[d].checked) return radios[d].value;
return null;
}
var form = document.forms[name];
var seikai = 0;
for (var i in answers) {
var e = form.elements[i]; if (!e) continue;
if (answers[i] == readRadio(e)) seikai++;
}
var score = seikai * 20;
alert("あなたは"+score+"点でした!");
return false;
}
</script>

<form name=radioB>
<p>カナダの首都は?
<ul>
<li> <label><input type=radio name=Q1 value=1>オタワ</label>
<li> <label><input type=radio name=Q1 value=2>トロント</label>
<li> <label><input type=radio name=Q1 value=3>モントリオール</label>
</ul>
中略
<p><button type=button onclick="saiten('radioB',{Q1:'1',Q2:'3',Q3:'3',Q4:'2',Q5:'3'})">採点</button>
</form>
    • good
    • 0
この回答へのお礼

分かりやすく説明して頂きありがとうございました!とても返事が遅れてしまいすみませんでした。

お礼日時:2013/09/04 12:33

ANo.1の補足です。



>↓この部分ですよね。
→そうです。

>1記事ごとに質問・正解が違うものにしたいです。記事ごとにスクリプトの記述は、
 変えれるのでしょうか?
→現在のスクリプトのロジックでは変更できません。
 変更するためには、onclickでスクリプトをコールするときに正解の変数を
 指定し、スクリプト側でこれを受け取って答えの番号の配列に入れるように
 ロジックを変更する必要があります。

javascriptの基本を、もう少し勉強する必要がありますね。
    • good
    • 0

設定-テンプレートの設定画面のHTML編集で、<head>~</head>の間に


スクリプトを定義してみてください。

この回答への補足

↓この部分ですよね。

<script>
function saiten(){

var seikai=0; //正解数を入れる変数

//答えの番号を配列に入れる
var trueAns = new Array(0,5,8,10,14);

//正解のラジオボタンがチェックされているか確認
for (i=0 ; i<5 ; i++)
{
if( document.radioB.elements[trueAns[i]].checked )
seikai++;
}

alert("あなたは"+seikai*20+"点でした!");
}
</script>



--------------------------------------------------

↓この部分が記事ごとに変わらないと次のページでも正解の順番が同じなりますよね?


//答えの番号を配列に入れる
var trueAns = new Array(0,5,8,10,14);



1記事ごとに質問・正解が違うものにしたいです。記事ごとにスクリプトの記述は、変えれるのでしょうか?

他の方法でも結構ですので、ご指導ください。

補足日時:2013/06/01 19:49
    • good
    • 0

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