上記は私のアプリケーションのjsfiddleです。フィドルにはたくさんのコードが含まれていることをお詫びしますが、アプリを機能させるにはコードが必要であり、実際にコードを大幅に削減しようとしました。
ただし、以下の手順に従ってjsfiddleを使用してください。
フィドルを開くときは、[グリッドを開く]リンクをクリックして、[TrueまたはFalse]オプションを選択します。「True」ボタンと「False」ボタンが表示され、1を示すテキスト入力が表示されます。
[質問を追加]ボタンをクリックすると、必要な数より少ない回答を選択したことを示すアラートが表示されます。これは、テキスト入力
1
に回答の数が必要であると記載されているが、回答を選択していない場合に当てはまります。したがって、「True」または「False」のいずれかを選択してから、「AddQuestion」ボタンをクリックします。入力した内容のテーブルに行が追加されていることがわかります。次に、行内で選択したボタンをオフにして、「True」ボタンも「False」ボタンもオンにならないようにします。アプリケーションの下部にある[詳細の送信]ボタンをクリックします。選択した回答が少ないことを示すアラートが表示されないことに気付きました。
これは私が抱えている問題です。[詳細を送信]ボタンをクリックすると、選択した回答が少ないことを示すアラートが表示されないのはなぜですか。送信ボタンに他の検証メッセージが表示されることはわかっているので、関数の呼び出し方法に問題はありません。問題が発生している場所で選択した回答の数を検証しようとしているのは、validation()関数内です。
以下は、jsfiddleの下部にある検証のコードです。
function validation() {
var marks = parseInt($("#total-weight").text());
var _qid = "";
var _msg = "";
var maxQuestions = 5;
var questionsAdded = $('tr.optionAndAnswer').length;
var alertValidation = "";
// Note, this is just so it's declared...
$("tr.optionAndAnswer").each(function () {
_qid = $("td.qid", this).text();
_msg = "You have errors on Question Number: " + _qid + "\n";
$(".numberAnswerTxtRow", this).each(function () {
var currenttotal = $(this).closest('.optionAndAnswer').find('.answerBtnsOn').length;
if (currenttotal < $(this).val()) {
alertValidation += "\n\u2022 You have selected less answers than the required amount\n";
}
if (alertValidation != "") {
return false; //Stop the each loop
}
});
if (alertValidation != "") {
return false;
}
});
if (alertValidation != "") {
alert(_msg + alertValidation);
return false;
}
return true;
}