我想让用户单击一个起点,然后单击一个终点,并能够在选定的两个点之间操作各种表单元素。
该页面是一个包含许多行的表格,每行包含相关信息以操作/保存该行中问题的答案。每行都有一个隐藏的值输入,以及是/否单选按钮,主要用于非熟练用户。带有问题的 TD 单元格允许用户单击或在是、否、空之间切换。所以基本上我在页面上留下了单选按钮以显示是/否并使用隐藏字段来存储 (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);
});
现在我想允许用户单击一个起点并让该答案将以下所有问题填充到他们单击第二个项目的任何位置。可能是 10 个问题,或者 20 个问题,它是一个未知变量。可能有一页上有130个问题,连续20个问题可能是“是”。如上所述,每一行都有一个“问题”单元格,之前的单元格是项目单元格。
我知道如何根据绑定到下面列出的 click/dblclick 事件的 jquery 选择器/函数来设置起始元素和结束元素。
我不确定的是如何遍历 dom 或选择我需要在页面上两个选定点之间操作的所有元素。
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);
}
});