JQuery onChange 使用变化前的值(需要变化后的值)
JQuery onChange uses values before change (values after change needed)
我正在开发一个模块,如果只有一个有效值和一个空值可用,它应该 select 是多离子场或单离子场的唯一可能值。
到目前为止它工作正常,直到我使用 ACL 禁用 selection 值。
例如,我得到一个具有 3 个可能值的 selection 字段。然后我禁用其中的 2 个(ACL - 如果有一个特殊的队列 selected)所以只剩下一个值(+ 一个空值)。
我的模块一开始不会选择最后一个值,但是当我更改同一页面上的任何其他内容时(第二次 onchange 调用)它会选择最后一个可能的值。
第一个 if 条件检查字段中是否只有一个可能的值。当我记录 'Change' 数组时,即使调用整个函数的 'change' 是禁用这些值的 ACL,它总是会得到禁用的值。
我对 javascript 还是有点陌生,还没有找到解决方案。
如果有任何帮助,我将不胜感激。
$('.TableLike').on("change", function () {
var Change = [];
$('.Row').each( function() {
$(this).children().next().children().next().children().each( function(index) {
Change[index] = $(this).text()
} )
if ( (!Change[2] || /.*Field needed.*/i.test(Change[2])) && Change[0] === "-") {
SoleOption = Change[1];
$(this).children().next().children().next().children().each(function() {
if ($(this).text() === "-") {
$(this).removeAttr("selected");
}
if ($(this).text() === SoleOption) {
$(this).attr("selected", "selected");
}
} )
$(this).children().next().children().children().children().val(SoleOption)
}
SoleOption = "";
Change = [];
} )
} )
我设法用 setTimeout() 方法解决了这个问题。
因此 DOM 在 ACL 进行更改之前更新。
我在 onChange 方法之后打开了 setTimeout 方法,并将更改后应该 运行 的所有代码插入到 setTimeout 方法中。
我希望这对以后的其他人有所帮助。
我正在开发一个模块,如果只有一个有效值和一个空值可用,它应该 select 是多离子场或单离子场的唯一可能值。
到目前为止它工作正常,直到我使用 ACL 禁用 selection 值。 例如,我得到一个具有 3 个可能值的 selection 字段。然后我禁用其中的 2 个(ACL - 如果有一个特殊的队列 selected)所以只剩下一个值(+ 一个空值)。 我的模块一开始不会选择最后一个值,但是当我更改同一页面上的任何其他内容时(第二次 onchange 调用)它会选择最后一个可能的值。
第一个 if 条件检查字段中是否只有一个可能的值。当我记录 'Change' 数组时,即使调用整个函数的 'change' 是禁用这些值的 ACL,它总是会得到禁用的值。
我对 javascript 还是有点陌生,还没有找到解决方案。
如果有任何帮助,我将不胜感激。
$('.TableLike').on("change", function () {
var Change = [];
$('.Row').each( function() {
$(this).children().next().children().next().children().each( function(index) {
Change[index] = $(this).text()
} )
if ( (!Change[2] || /.*Field needed.*/i.test(Change[2])) && Change[0] === "-") {
SoleOption = Change[1];
$(this).children().next().children().next().children().each(function() {
if ($(this).text() === "-") {
$(this).removeAttr("selected");
}
if ($(this).text() === SoleOption) {
$(this).attr("selected", "selected");
}
} )
$(this).children().next().children().children().children().val(SoleOption)
}
SoleOption = "";
Change = [];
} )
} )
我设法用 setTimeout() 方法解决了这个问题。 因此 DOM 在 ACL 进行更改之前更新。 我在 onChange 方法之后打开了 setTimeout 方法,并将更改后应该 运行 的所有代码插入到 setTimeout 方法中。
我希望这对以后的其他人有所帮助。