Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 代码在不应该生效时生效_Javascript_Jquery - Fatal编程技术网

Javascript 代码在不应该生效时生效

Javascript 代码在不应该生效时生效,javascript,jquery,Javascript,Jquery,我有一个功能,如果用户单击按钮,它将在文本框中显示一个值,并在单击“btn”按钮后执行另一个功能的触发: function addwindow(numberAnswer, gridValues, btn) { $('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true); $('#btn'+gridValues).trigger('click'); } 现在我想做的是: 如果用户单击“

我有一个功能,如果用户单击按钮,它将在文本框中显示一个值,并在单击“btn”按钮后执行另一个功能的触发:

function addwindow(numberAnswer, gridValues, btn) { 
    $('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true);
    $('#btn'+gridValues).trigger('click');       
 }
现在我想做的是:

如果用户单击“添加”按钮,则在文本框中显示“答案数”列中的数字,或者换句话说,从addwindow功能执行此操作:

$'mainNumberAnswerTxt'.valnumberAnswer.data'data-ignore',true

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

如果$'MainNumberTranswerTXT'.data'data-ignore'!=真的{ $'.answertxt',context.valcontext.find'.answerBtnsOn'.length>0?context.find'.answerBtnsOn'.length:0; }

问题在于步骤1工作正常,在用户单击Add按钮后,它确实会在文本框中的number of Answers列中显示数字

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

有人知道为什么会发生这种情况以及如何解决吗

演示:

下面是应用程序的一个示例。请按照以下步骤操作:

第一步:在左手边你们会看到一个绿色的加号按钮,点击它,它会打开一个模式窗口。 第2步:在模式窗口中有一个搜索栏,输入AAA并提交搜索,您将看到一堆行出现。 步骤3:在最后一行中,您会看到在“答案栏编号”下包含编号4,单击此行中的“添加”按钮,模式窗口将关闭

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

但问题是:

步骤4:如果单击打开的网格链接并选择按钮3,您将看到下面的字母按钮变为A-C,只有字母B处于打开状态

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


如何解决此问题?

使用而不是attr-attr接受字符串,数据接受JavaScript对象。

问题来自这样一个事实:您在$'MainNumberTranswerTXT'上将数据属性设置为false,但您在点击中对照输入进行检查

如果$'mainnumberTranswerTXT'.attr'data-ignore'!=真的

编辑

为了确保在模式后重新加载网格时忽略进程只执行一次,您必须在测试后更改块内的内容:

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);
}
编辑2

主要的问题是,在设置$mainnumberranswertxt.valnumberranswer之后,您会重新影响它。您试图通过ignoreattribute忽略它

我想说的是,删除该属性的每一次出现,并更改以下函数

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


以便在发生可视更改后修改该值。

是否确实对正确的元素进行了数据忽略检查?您能提供更多的HTML吗?第二个代码块中似乎有语法错误。你有什么错误吗?@Inkbug很抱歉,我粘贴了错误的代码,我在整理语法错误之前粘贴了代码。我已经更新了代码,该代码现在没有提供语法错误,但仍然存在如中所述的问题question@Py. 您希望看到哪个html?它应该在正确的元素中。是否可以制作一个JSFIDLE?我尝试了data方法,但仍然没有运气,因为第二块代码正在生效,它仍然在文本框中显示错误的数字。我将更新问题,向您展示应用程序和要遵循的步骤,以便您可以看到发生了什么如果我这样做,它会在文本框中显示答案数列中的数字,但以后如果我想让它显示打开了多少个按钮,它不会像忽略第一个代码一样这样做,它没有达到第二个代码我将在一个小时内测试它,因为我必须执行任务,但我将在大约一个小时后返回给您:现在,在用户单击“添加”按钮后,它不会显示正确的答案数。Demo updatedOk,我在你的代码中加入了更多内容,这应该可以编辑传入的代码。当它允许我在20小时内完成时,我会给你很高的分数,为什么我不知道20小时,但必须超过20小时
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;
}