代码在不应该生效时生效

我有一个function,如果用户点击一个按钮,它将在文本框中显示一个值,并在点击’#btn’按钮后执行另一个function的触发:

function addwindow(numberAnswer, gridValues, btn) { $('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true); $('#btn'+gridValues).trigger('click'); } 

现在我想做的是:

  1. 如果用户单击“添加”按钮,则将“答案数”列中的数字显示到文本框中,换句话说,从addwindow()函数执行此操作:

    $('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true);

  2. 如果用户单击了#btn+gridValues按钮,则在文本框中显示当前打开的按钮数量的数字,或者换句话说执行此代码:

    if ($('#mainNumberAnswerTxt').data('data-ignore') != true) { $('.answertxt', context).val(context.find('.answerBtnsOn').length > 0 ? context.find('.answerBtnsOn').length : 0); }

问题是第1步工作正常,它会在用户点击“添加”按钮后显示文本框中“答案数”列中的数字。

问题是第2步,在用户点击#btn #btn+gridValues按钮后,当前打开的按钮数量没有显示正确的数字。它只是不改变文本框中的数字。

有谁知道为什么会这样,以及如何解决这个问题?

DEMO:

这是该应用程序的演示 。 请按照以下步骤操作:

第1步:在左侧,您将看到一个绿色加号按钮,单击它,它会打开一个模态窗口。 第2步:在模态窗口中有一个搜索栏,输入“AAA”并提交搜索,你会看到一堆行出现。 步骤3:在最后一行中,您会在“Number of Answer”列中看到它包含数字4,单击此行中的“添加”按钮,模态窗口将关闭。

您将看到文本框显示文本框中的数字4,这是正确的,因为这是添加行时“答案数”列下的行中的数字。

但下面是问题:

步骤4:如果单击“打开网格”链接并选择按钮3,您将看到下面的字母按钮更改为AC,仅打开字母“B”。

在文本框中,它应显示数字1,因为只有1个按钮打开,但它不显示此数字,这是我遇到的问题。

如何解决这个问题?

问题来自于你在$('#mainNumberAnswerTxt') data-attribute设置为false的$('#mainNumberAnswerTxt')但是你正在检查输入( 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

 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["AC"] = "3"; myNumbers["AD"] = "4"; myNumbers["AE"] = "5"; myNumbers["AF"] = "6"; myNumbers["AG"] = "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["AC"] = "3"; myNumbers["AD"] = "4"; myNumbers["AE"] = "5"; myNumbers["AF"] = "6"; myNumbers["AG"] = "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; } 

为了在视觉变化发生后修改值。

使用data而不是attrattr需要一个字符串, data需要JavaScript对象。