ユーザーが始点をクリックしてから終点をクリックし、選択した 2 つの点の間でさまざまなフォーム要素を操作できるようにしたいと考えています。
ページは多数の行を持つテーブルであり、各行には、その行の質問に対する回答を操作/保存するための関連情報が含まれています。各行には値の非表示の入力と、主にスキルのないユーザー向けの [はい/いいえ] ラジオ ボタンがあります。質問のある TD セルでは、ユーザーはクリックするか、Yes、No、Empty を切り替えることができます。したがって、基本的に、ページのラジオボタンを残してはい/いいえを表示し、非表示フィールドを使用して (1,0,-1) の値を保存します。
これは、質問セルがクリックされたときに回答を設定するために使用するものです。
$(".question").bind("click dblclick", function(e) {
var newClassName = "AnswerUnknown";
var hiddenAnswerId = $(this).attr('id').replace("question", "answer");
var answer = parseInt($("#" + hiddenAnswerId).val());
var newValue;
switch (answer) {
case -1:
newClassName = "AnswerCorrect";
newValue = 1;
$("#" + $(this).attr('id').replace("answer", "radioYes")).attr('checked', 'checked');
$("#" + $(this).attr('id').replace("answer", "radioNo")).attr('checked', '');
break;
case 1:
newClassName = "AnswerWrong";
newValue = 0;
$("#" + $(this).attr('id').replace("answer", "radioYes")).attr('checked', '');
$("#" + $(this).attr('id').replace("answer", "radioNo")).attr('checked', 'checked');
break;
default:
newClassName = "AnswerEmpty";
newValue = -1;
$("#" + $(this).attr('id').replace("answer", "radioYes")).attr('checked', '');
$("#" + $(this).attr('id').replace("answer", "radioNo")).attr('checked', '');
}
$("#" + hiddenAnswerId).val(newValue);
$(this).removeClass().addClass(newClassName);
});
ここで、ユーザーが開始点をクリックできるようにし、その回答によって、2 番目の項目をクリックした場所まで、次のすべての質問に入力できるようにしたいと考えています。10 問離れている可能性もあれば、20 問離れている可能性もありますが、これは未知の変数です。130 の質問があるページがあり、20 の質問が連続して「はい」である場合があります。上記のように、各行には「質問」セルがあり、その前のセルが項目セルです。
以下にリストされているクリック/dblclickイベントにバインドされたjqueryセレクター/関数に基づいて、開始要素と終了要素を設定する方法を知っています。
私が確信していないのは、dom をトラバースする方法、またはページ上で選択した 2 つのポイント間で操作する必要があるすべての要素を選択する方法です。
var StartItem;
var EndItem;
$(".item").bind("click dblclick", function(e) {
var StartClassName = "AnswerUnknown";
var EndClassName = "AnswerUnknown";
var StartAnswerId;
var EndAnswerId;
var StartAnswer;
if (StartItem === undefined) {
StartItem = this;
StartAnswerId = $(this).attr('id').replace("item", "rs");
StartAnswer = parseInt($("#" + StartAnswerId).val());
}
else {
if (EndItem === undefined) {
EndItem = this;
EndAnswerId = $(this).attr('id').replace("item", "rs");
EndAnswer = parseInt($("#" + EndAnswerId).val());
}
}
if (StartItem == this) {
$(this).removeClass().addClass(StartClassName);
}
if (EndItem == this) {
$(this).removeClass().addClass(EndClassName);
}
});