DOM 元素更改在 JavaScript 代码中不可见
DOM elements changes not visible in javascript code
setTimeout( function () {
ajaxLoadFormHeader("A", nRequest_ID, nJeppesen_Number);
ajaxLoadFormHeader("B", nRequest_ID, nJeppesen_Number);
spinner.stop();
if (document.getElementById("txt_A_Primary_Permits").checked ) {
showRouting("A");
}
if (document.getElementById("txt_B_Primary_Permits").checked ) {
showRouting("B");
}
}, 500);
该页面有两个div,用于保存我们正在使用的 A 和 B 路由信息。 我通过隐藏一个并在单击按钮时显示另一个来在它们之间切换。
ajaxLoadFormHeader(( 函数将数据从服务器加载到每个标头窗体上的文本和复选框元素中。
在调用 ajaxLoadFormheader(( 之后,我查看每个表单中的一个复选框元素,并根据选中哪个元素,显示路由div 并隐藏另一个。
问题来了。 在从 ajaxLoadFormHeader(( 函数返回后,当我检查复选框元素的".checked"状态时,它们并不反映 ajaxLoadFormHeader(( 刚刚设置的更改。 在 ajaxLoadFormHeader(( 调用结束时,值没有更改。
我怀疑问题与代码如何更改 DOM 值有关,并且在当前代码块关闭之前更改尚未完成并生效。 换句话说,也许 DOM 更改在 setTimeout(( 函数完成之前是不可见的?
细节:调用 ajaxLoadFormHeader(( 函数后,即使它实际上设置了其中一个复选框的选中状态,(txt_A_Primary_Permits.checked( 和 (txt_B_Primary_Permits.checked( 都返回 false - 即使表单加载并显示选中的框。
注意:这不是全部代码。 有代码用于检测是否未选中任何复选框,或处理两个复选框都处于选中状态的错误条件。 我只包含了相关的代码,供您查看问题。
AJAX 中的第一个 A 代表异步。如果请求确实是异步的,则意味着在后台执行请求时,代码将继续运行。这意味着在请求仍繁忙时,微调器将停止并评估 ifs,因此复选框的状态尚未更新。
解决此问题的正确方法是将回调或事件处理程序附加到请求完成时调用的请求。现在确切的细节取决于您实现ajaxLoadFormHeader
的方式,因此很难提供,但希望这些信息至少可以帮助您找到正确的解决方案。
很好的起点是这个问题,这个问题用一个使用 onreadystatechange
事件的"普通"JavaScript AJAX 示例来回答。
- 云代码(javascript)失败,原因是:{代码:1,消息:内部错误
- 简化此If语句,使其不会't重复代码-Javascript
- 十进制到二进制代码Javascript
- 第二次单击时执行不同的代码(JavaScript)
- 在不使用jquery($symbol)knockout.js的情况下分离代码javascript
- 缩短几个元素的onclick代码 - JavaScript
- 英国银行排序代码 JavaScript 正则表达式
- 我无法在谷歌图表的代码 javascript 中获取 json 数据(项目 Python Hello Dashboard
- 和代码 JavaScript 没有被 &.
- 我怎样才能减少这段代码 javascript 代码,这样它就不会那么重复了
- 我想单击一个按钮,一次只执行已经制作的程序中的一行代码.(JavaScript)
- 滑动 DIV 代码 Javascript 的小问题
- 尝试重写代码 JavaScript
- 是否可以检测到在不使用键代码 javascript 的情况下按下了输入键
- 输入网址代码 JavaScript 播放器
- 管理通用客户端代码(javascript/css)
- 理解代码javascript
- 加载json-url参数代码(javascript修改)
- 变量检查错误的代码(javascript)
- css属性仅由代码javascript应用