我在这里有一个 jsfiddle:http: //jsfiddle.net/aND4g/2/我在显示文本输入值时遇到问题。
应该发生的是,如果 Option 是True or False
or Yes or No
,则 Number of Answers 文本输入应始终包含值 1(始终,此值不能更改);如果用户随后从True or False
或Yes or No
选项更改为编号选项之一,则文本输入应返回 0。
如果用户将True or False
orYes or No
选项附加到表格行中,但问题是没有打开 、 或 或 的任何答案按钮,True
然后将False
选项更改为编号选项之一,而不是显示 0,它仍然是显示值 1。Yes
No
但是,如果用户确实打开了 、 或答案按钮之一True
,然后False
将选项从或更改为编号选项之一,那么它确实会将文本输入中的值从 更改为。Yes
No
True or False
Yes or No
1
0
为什么要这样做,如何解决它,以便每次选择编号选项时,它总是会出现0
在文本输入中?
我相信问题出在下面但不确定:
$(this).closest('.option').siblings('.answer').find('.answers').each(function(index) {
if (!isNaN(clickedNumber) && index < clickedNumber) {
$(this).show();
if (prevButton === 'True or False' || prevButton === 'Yes or No') {
// show as blank
$(this).closest('.option').siblings('.numberAnswer').find('.answertxt').val(0).show();
} else {
// show but don't change the value
$(this).closest('.option').siblings('.numberAnswer').find('.answertxt').show();
}
} else {
$(this).hide();
$(this).removeClass('answerBtnsOn');
$(this).addClass('answerBtnsOff');
}
....
function btnclick(btn, iQuestionIndex, bDisableAppend) {
//var context = $(btn).parent();
var context = $(btn).parents('tr'); // need to go up one level
context.add(context.siblings()); // to collect siblings in other rows since the limit in each row is 7
if (context.length == 0) {
context = $(btn).parents('tr');
}
var $btn = $(btn);
var value = btn.value;
var id = $btn.attr('id');
....
updateAnswer(context , iQuestionIndex, bDisableAppend);
var container = $btn.closest(".optionAndAnswer");
// here the zero gets assigned
var answertxt = $(".answertxt", container);
var numberison = $(".answerBtnsOn", container).length;
var maxRowValue = $('.gridTxt', container).val();
if (btn.id == "answerTrueRow" || btn.id == "answerFalseRow")
return;
if (maxRowValue === 'True or False' || maxRowValue === 'Yes or No') {
if (answertxt.val() == 1 && numberison == 0) {
numberison = 1;
}
}
answertxt.val(numberison);
return false;
}
更新:
小提琴只是主应用程序的完整缩短版本。对于附加的每一行,它都算作一个问题,因此第 1 行是问题 1,第 2 行是问题 2,依此类推。在小提琴中,您在顶部选择一个选项类型、答案数量和正确答案,然后将其附加到一行中。如果您想进行更改,您可以在附加行中编辑选项类型、答案数量和正确答案。这就是为什么它被设置为它被设置的方式。
JSFIDDLE 要遵循的步骤:
True or False
如果上一个选项是或Yes or No
但没有打开应答按钮,查看会发生什么的步骤:
打开应用程序时,单击
Open Grid
链接并选择按钮True or False
或Yes or No
从网格中选择。然后单击Add Question
按钮,这将在您选择的内容下方附加一行。您可以在附加行的文本输入中看到 Number of answers 的值为 1,这很好。但是在附加的行中单击
Open Grid
并选择 3 或 4 的数字选项。答案数的文本输入不会像应有的那样更改为 0,它仍然显示 1。
True or False
如果上一个选项是或Yes or No
打开了应答按钮,则查看会发生什么的步骤:
从上面重复步骤 1。
重复上面的步骤 2,但在单击
Open Grid
更改选项之前,请选择或/或Answer
行底部的按钮(取决于您选择的选项),然后将选项更改为数字选项。您会看到该值确实从 1 变为 0。True
False
Yes
No
更新:
我的旧代码在这里有一个工作小提琴:http: //jsfiddle.net/aND4g/50/
这是最新的 jsfiddle,它不太工作:http: //jsfiddle.net/aND4g/53/
我发现小提琴和停止它工作的唯一区别是下面的代码:
var $tbody = $('#qandatbl_onthefly > tbody');
var $tr = $("<tr class='optionAndAnswer' align='center'>");
var $td = $("<td width='50%' class='extratd'>");
var $options = $("<table class='option'><tbody><tr><td>1. Option Type:</td></tr></tbody></table>");
var $noofanswers = $("<br /><table class='noofanswers'><tbody><tr><td>2. Number of Answers:</td></tr></tbody></table>");
var $answer = $("<br /><table class='answer'><tbody><tr><td>3. Answer:</td></tr></tbody></table>");
var $questionType = '';
工作版本包含以下代码:
var $tbody = $('#qandatbl_onthefly > tbody');
var $tr = $("<tr class='optionAndAnswer' align='center'>");
var $td = $("<td class='extratd'>");
var $noofanswers = $("<div class='noofanswers'>2. Number of Answers:<br/></div>");
var $options = $("<div class='option'>1. Option Type:<br/></div>");
var $answer = $("<div class='answer'>3. Answer:<br/></div>");
var $questionType = '';
如果我将$options
,$noofanswers
和$answer
变量从<table>
标签更改为<div>
标签,那么它可以工作。但我希望将变量放在<table>
标签而不是<div>
标签中。<table>
那么为什么它在标签中不起作用?