我运行一个 ajax 调用,将插值更新为完全构建的选择框元素。
我想将创建/返回的选择框转换为选定的选择框一旦完成完全加载,否则它将恢复为常规选择框。
我已经尝试过:
- 监听“DOMSubtreeModified”(和其他类似事件),然后激活所选行,但是这些行运行得太频繁,我必须知道带有所有选项的选择框何时完全启动。我可以强制启动每个更改,这很糟糕 - 消耗资源而且完全是错误的。
- 在 ajax return('ajax:complete' 事件)上启动一些回调,但是,这并不能保证 html 控件完全启动,如 this answer 中所述。 (并经过测试)。
- 我尝试为选择控件设置 onload 事件。
主要代码行:
JavaScript 调用:
ajax('{{=URL('controller_name', 'func_name')}}', ['param1'], 'target_div');
Python Controller 返回(这将返回一个选择控件,其中包含启动的选项对象并覆盖 target_div 内部 html):
return SELECT(distinct_values, _id = 'selectbox_id' , _multiple = 'true' , _class='SelectBoxSingleDisabled');
寻找面向 web2py 的解决方案。如果可能的话,不要使用暴力/黑客的东西。谢谢!
最佳答案
有几个选项(建议使用前两个 here ):
在 Controller 中,将选择的初始化代码添加到
response.js
- 这将在返回的 HTML 添加到 DOM 后执行。将选择的初始化代码添加到 select 元素后面的脚本元素中:
CAT(SELECT(distinct_values, _id = 'manual_group_selectbox' , _multiple = 'true' , _class='SelectBoxSingleDisabled'), SCRIPT('[Chosen code]'))
ajax()
函数的第三个参数可以是一个 Javascript 函数,它获取服务器返回的数据。因此,您可以编写一个函数,将返回的 HTML 添加到 DOM,然后初始化 Chosen:ajax( '{{=URL('controller_name', 'func_name')}}', ['param1'], function(html) { [add html to DOM] [initialize Chosen] } );
设置 jQuery
<.ajaxSuccess()
事件处理程序,该处理程序应在ajax()
函数更新 DOM 后运行。
关于javascript - Web2py - 如何确定 ajax 后加载控制的结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768772/