2012-07-15 99 views
1

我有一个函数,如果用户点击一个按钮,它会在文本框中显示一个值,它会在'#btn'按钮后执行另一个函数的触发器点击:代码生效时它不应该是

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+gridValues按钮后当前打开了多少个按钮。它只是不改变文本框中的数字。

有谁知道为什么会发生这种情况,以及如何修复?

DEMO:

这里是应用程序的一个demo。请按照以下步骤操作:

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

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

但下面的问题是:

第4步:如果你点击“打开网格”链接,然后选择按钮3,你会看到下面的变化字母按钮AC只用字母“B”开启。

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

如何解决这个问题?

+1

您确定在正确的元素上进行数据忽略检查吗?你能提供更多的HTML吗? – 2012-07-15 10:36:50

+1

第二个代码块中似乎有语法错误。你有什么错误吗? – Inkbug 2012-07-15 10:38:53

+0

@Inkbug对不起,我粘贴错误的代码,我粘贴的代码之前,我排除了语法错误。我已经更新了现在不提供语法错误的代码,但仍然如问题 – user1490145 2012-07-15 11:07:11

回答

2

问题来自于您将$('#mainNumberAnswerTxt')上的data-attribute设置为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属性忽略它。

什么,我会adivse,将每一次出现删除该属性并更改下列功能

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; 
} 

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

+0

如果我这样做,然后它显示他编号在文本框形式的“答复数量”列,但然后当将来如果我想要它要显示打开了多少个按钮,它不这样做,因为它忽略了第一个代码,它没有达到第二个代码 – user1490145 2012-07-18 10:36:17

+0

查看编辑的答案 – 2012-07-18 11:59:25

+0

我将在一个小时内测试它,因为我必须运行一个差事,但我将在大约一个小时内回复给您:) – user1490145 2012-07-18 12:13:32

0

使用data而不是attr - attr取一个字符串,data取JavaScript对象。

+0

我试过数据方法,但仍然没有运气,它仍然在文本框中显示不正确的数字,因为第二块代码正在生效。我将更新的问题,向您展示应用程序和步骤,以便您可以看到发生了什么 – user1490145 2012-07-15 11:21:01