javascript - Web2py - 如何确定 ajax 后加载控制的结束

标签 javascript ajax web2py jquery-chosen

我运行一个 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 ):

  1. 在 Controller 中,将选择的初始化代码添加到 response.js - 这将在返回的 HTML 添加到 DOM 后执行。

  2. 将选择的初始化代码添加到 select 元素后面的脚本元素中:

    CAT(SELECT(distinct_values, _id = 'manual_group_selectbox' , _multiple = 'true' ,
               _class='SelectBoxSingleDisabled'),
        SCRIPT('[Chosen code]'))
    
  3. ajax() 函数的第三个参数可以是一个 Javascript 函数,它获取服务器返回的数据。因此,您可以编写一个函数,将返回的 HTML 添加到 DOM,然后初始化 Chosen:

    ajax(
      '{{=URL('controller_name', 'func_name')}}', ['param1'],
      function(html) {
        [add html to DOM]
        [initialize Chosen]
      }
    );
    
  4. 设置 jQuery .ajaxSuccess() 事件处理程序,该处理程序应在 ajax() 函数更新 DOM 后运行。

    <

关于javascript - Web2py - 如何确定 ajax 后加载控制的结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768772/

相关文章:

javascript - 带有清除字段按钮的 Angular JS ionic 搜索框

javascript - Angular : Why is my div not showing/hiding with ng-show/ng-hide?

python - Web2py - 显示与 id 不同的引用字段

javascript - jsp : Could I change the order of render/execution

javascript - 将 html 表导出为带有西类牙字符的 excel

javascript - 长轮询客户端框架

javascript - Ajax 函数作为 javascript 比较的一部分

ajax - Angularjs + Flask-wtf : Bad request 400

python - 在 Google App Engine 上使用 web2py 上传文件

python - 接受 POST 和 GET 的搜索屏幕