Javascript 触发“;更改“;使用带有多个选择器的jQuery
我试图使用jQuery在两个不同的选择器上触发一个“change”事件,但由于某种原因,当我这样做时,实际上似乎只有第一个选择器触发该事件 这就是我正在做的: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(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');