Javascript 触发“;更改“;使用带有多个选择器的jQuery

Javascript 触发“;更改“;使用带有多个选择器的jQuery,javascript,jquery,event-handling,qualtrics,Javascript,Jquery,Event Handling,Qualtrics,我试图使用jQuery在两个不同的选择器上触发一个“change”事件,但由于某种原因,当我这样做时,实际上似乎只有第一个选择器触发该事件 这就是我正在做的: jQuery(first_field).trigger('change'); jQuery(second_field).trigger('change'); 之所以要这样做,是因为我在selector_1和selector_2上有用于更改事件的函数,这些函数禁用表单中的某些输入字段。我评估第二个更改事件没有被触发的方式是,这些输入字段没

我试图使用jQuery在两个不同的选择器上触发一个“change”事件,但由于某种原因,当我这样做时,实际上似乎只有第一个选择器触发该事件

这就是我正在做的:

jQuery(first_field).trigger('change');
jQuery(second_field).trigger('change');
之所以要这样做,是因为我在
selector_1
selector_2
上有用于更改事件的函数,这些函数禁用表单中的某些输入字段。我评估第二个更改事件没有被触发的方式是,这些输入字段没有被禁用

我知道禁用函数和jQuery.change事件都是有效的,因为如果我简单地使用鼠标更改表单,函数的行为与我预期的一样

更新:

以下是启用/禁用代码:

function disable_field(s) {
    if ($(s).disabled != true) {
        $(s).disabled = true;
        /* Reset text value */
        if ($(s).type == "text") {
            $(s).value = "";
        /* Reset selected value */
        } else if ($(s).type == "select-one") {
            $(s).selectedIndex = 0;
        }
    }
}
function enable_field(s) {
    if ($(s).disabled != false) {
        $(s).disabled = false;
    }
}
请注意,此代码与Qualtrics一起使用;调查软件,让你把JS与你的问题。它们将自己的选择器分配给只允许ID的
$()

这是
。更改
代码:

    jQuery(first_field).change(function() {
        /* Parse id */
        var the_id = this.id;
        var this_question = the_id.slice(-1);
        the_id = the_id.substring(0, the_id.length - 3);
        /* Create selectors */
        var selector2 = the_id + '2~' + this_question;
        var selector3 = the_id + '3~' + this_question + '~1~TEXT';
        /* Handle toggle */
        if (this.selectedIndex == 1) { 
            disable_field(selector2);
            disable_field(selector3);
        } else {
            /* Account for value of second_field */
            if ($(selector2).selectedIndex != 1;) {
                enable_field(selector3);
            }
            enable_field(selector2);
        }
    });

    jQuery(second_field).change(function () {
        /* Parse id */
        var the_id = this.id;
        var this_question = the_id.slice(-1);
        the_id = the_id.substring(0, the_id.length - 3);
        /* Create selectors */
        var selector3 = the_id + '3~' + this_question + '~1~TEXT';
        /* Handle toggle */
        if (this.selectedIndex == 1) { 
            disable_field(selector3);
        } else {
            enable_field(selector3);
        }           
    });
试用

试用


你能再发一些代码吗?如果你把第一个注释掉怎么办?第二行本身会导致期望的结果吗?@FelixKling确实如此。当我切换触发顺序时,它总是第一个起作用的。你发布的内容没有问题。这个问题肯定缺少了其他的背景,导致了这个问题:嗯,好吧,如果有人愿意帮助我并解释为什么它没有按照我想要的方式工作(或者简单地批评我的代码……我想我可以使用其中的一些!)你能发布更多的代码吗?如果你注释掉第一个呢?第二行本身会导致期望的结果吗?@FelixKling确实如此。当我切换触发顺序时,它总是第一个起作用的。你发布的内容没有问题。这个问题肯定还缺少其他背景,导致了这个问题:嗯,好吧,如果有人愿意帮助我并解释为什么它没有按我希望的方式工作(或者简单地批评我的代码……我想我可以使用其中的一些!),而这回答了OP的问题,我不认为用两条语句触发变更事件是问题所在。我同意。这就是为什么我说“试试”:)我很惊讶它能奏效。也许第一个选择器也在选择第二个选择器中的元素,或者反之亦然?@alexthebake如果答案正确,您应该用“V”按钮将其视为正确答案。塞扎-这可能是由很多事情造成的。。。我们只能猜测,除非我们看到相关的代码。虽然这回答了OP的问题,但我认为用两个语句触发变更事件不是问题。我同意。这就是为什么我说“试试”:)我很惊讶它能奏效。也许第一个选择器也在选择第二个选择器中的元素,或者反之亦然?@alexthebake如果答案正确,您应该用“V”按钮将其视为正确答案。塞扎-这可能是由很多事情造成的。。。我们只能猜测,除非我们看到相关的代码
$(selector_1).add(selector_2).trigger('change');