我有一个功能,如果用户点击一个按钮,它将在文本框中显示一个值,并在点击'#btn'按钮后执行另一个功能的触发:
function addwindow(numberAnswer, gridValues, btn) {
$('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true);
$('#btn'+gridValues).trigger('click');
}
现在我想做的是:
如果用户点击“添加”按钮,则将“答案数”列中的数字显示在文本框中,换句话说,从addwindow()
函数执行此操作:
$('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true);
如果用户点击了#btn+gridValues
按钮,则在文本框中显示当前打开的按钮数量的数字,或者换句话说,执行此代码:
if ($('#mainNumberAnswerTxt').data('data-ignore') != true) {
$('.answertxt', context).val(context.find('.answerBtnsOn').length > 0 ? context.find('.answerBtnsOn').length : 0);
}
问题是第1步工作正常,它会在用户点击“添加”按钮后显示文本框中“答案数”列中的数字。
问题在于步骤2,在用户点击#btn+gridValues
按钮后,当前打开的按钮数量没有显示正确的数字。它只是不会更改文本框中的数字。
有谁知道为什么会这样,以及如何解决这个问题?
样本:
这是应用程序的demo。请按照以下步骤操作:
步骤1:在左侧,您将看到一个绿色加号按钮,单击它并打开一个模态窗口。 第2步:在模态窗口中有一个搜索栏,输入“AAA”并提交搜索,你会看到一堆行出现。 第3步:在最后一行中,您会在“Number of Answer”列中看到它包含数字4,单击此行中的“添加”按钮,模态窗口将关闭。
您将看到文本框中的数字4显示正常,这是您添加行时“答案数”列下行内的数字。
但问题如下:
步骤4:如果单击“打开网格”链接并选择按钮3,您将看到下面的字母按钮变为A-C,只打开字母“B”。
在文本框中,它应该显示数字1,因为只打开了1个按钮,但是它没有显示这个数字,这就是我遇到的问题。
如何解决这个问题?
答案 0 :(得分:2)
问题来自于您在$('#mainNumberAnswerTxt')
上将数据属性设置为false,但您正在检查输入(点击中的this
)。
一种解决方案是进行以下测试if ($('#mainNumberAnswerTxt').attr('data-ignore') != true)
修改强>
要确保忽略过程只执行一次(在模态之后重新加载网格时),您必须在测试后更改块内的内容:
if ($('#mainNumberAnswerTxt').data('ignore') != true) {
$('.answertxt', context).val(context.find('.answerBtnsOn').length > 0 ? context.find('.answerBtnsOn').length : 0);
} else {
/*reset the ignore flag*/
$('#mainNumberAnswerTxt').data('ignore',false);
}
EDIT2
主要问题是您在设置后重新生成$('#mainNumberAnswerTxt').val(numberAnswer)
。您试图通过ignore
属性忽略它。
我想要的是删除该属性的每个出现并更改以下功能
function addwindow(questionText,textWeight,numberAnswer,gridValues,reply,btn) {
var answers = $.map(btn.split(''),function(chr){ return "#answer"+chr; }).join(', ');
if($(plusbutton_clicked).attr('id')=='mainPlusbutton') {
var myNumbers = {};
myNumbers["A-C"] = "3";
myNumbers["A-D"] = "4";
myNumbers["A-E"] = "5";
myNumbers["A-F"] = "6";
myNumbers["A-G"] = "7";
gridValues = myNumbers[gridValues];
$('#mainNumberAnswerTxt').show();
$('#mainNumberAnswerTxt').val(numberAnswer).data('ignore',true);
$('#mainGridTxt').val(gridValues).parent().append($('.optionTypeTbl'));
$('#btn'+gridValues).trigger('click');
$('.answers.answerBtnsOn').removeClass('answerBtnsOn').addClass('answerBtnsOff');
$(answers).addClass("answerBtnsOn").siblings().addClass('answerBtnsOff');
}
$.modal.close();
return false;
}
到:
function addwindow(questionText,textWeight,numberAnswer,gridValues,reply,btn) {
var answers = $.map(btn.split(''),function(chr){ return "#answer"+chr; }).join(', ');
if($(plusbutton_clicked).attr('id')=='mainPlusbutton') {
var myNumbers = {};
myNumbers["A-C"] = "3";
myNumbers["A-D"] = "4";
myNumbers["A-E"] = "5";
myNumbers["A-F"] = "6";
myNumbers["A-G"] = "7";
gridValues = myNumbers[gridValues];
$('#mainNumberAnswerTxt').show();
$('#mainGridTxt').val(gridValues).parent().append($('.optionTypeTbl'));
$('#btn'+gridValues).trigger('click');
/* moved the following line below the click simulation,
hence its value will be changed regardless of what happened during the click simulation*/
$('#mainNumberAnswerTxt').val(numberAnswer);
$('.answers.answerBtnsOn').removeClass('answerBtnsOn').addClass('answerBtnsOff');
$(answers).addClass("answerBtnsOn").siblings().addClass('answerBtnsOff');
}
$.modal.close();
return false;
}
为了在视觉变化发生后修改值。
答案 1 :(得分:0)
使用data
代替attr
- attr
取一个字符串,data
获取JavaScript对象。