dojo ie9 destoryRecursive on form

Posted

技术标签:

【中文标题】dojo ie9 destoryRecursive on form【英文标题】: 【发布时间】:2011-10-24 17:47:41 【问题描述】:

我有一个使用 xhrPost 提交的表单,然后返回表单结果,然后再次表单让用户输入更多详细信息。该代码在 Chrome 中有效,但在 IE 中,destroy 和 destroyRecursive 似乎不起作用,并且 ajax 返回将导致小部件已注册错误。

表单被加载到dojo对话框中,使用声明格式,当对话框打开并准备好时调用此函数:

var loadFunc = function() 
    dojo.parser.parse('quickaddcontainer');
    dojo.query('#quickAddBooking').onsubmit(function(e) 
        e.preventDefault();
        var xhrArgs = 
            form: dojo.byId("quickAddBooking"),
            url: '/booking/admin/quickadd?popup=1',
            handleAs: "text",
            load: function(data) 
                dojo.place(data, 'quickaddcontainer', 'replace');
                loadFunc();
            ,
            error: function(error) 
                dojo.byId("quickaddcontainer").innerhtml = "Form error: "+error;
            
        
        dojo.byId('quickaddcontainer').innerHTML = 'Loading...';
        dojo.xhrPost(xhrArgs);
        dijit.byId('quickAddBooking').destroyRecursive();
    );

任何想法为什么这在 IE 中不起作用?我已经尝试在加载函数中放置一个 destroy/destroyRecursive,在 xhrPost 调用甚至 findWidgets - destroyRecursive 之前,但似乎没有任何作用。

Moan:有时用 dojo 做这么简单的事情似乎很难——在其他框架中重新渲染永远不会导致问题。

【问题讨论】:

【参考方案1】:

似乎我已经回答了我自己的问题...将 innerHTML 调用移到底部有效。

        dojo.xhrPost(xhrArgs);
        dijit.byId('quickAddBooking').destroyRecursive();
        dojo.byId('quickaddcontainer').innerHTML = 'Loading...';

【讨论】:

在这种情况下,我不会那么责备 Dojo。你正在做一些非常奇怪的事情......尽管可以随意诅咒 IE :) InnerHTML 很讨厌,destroyRecursive 通常在清理时调用(不是在正常操作期间),所有查询的东西都比 dojo 小部件更像 JQuery。

以上是关于dojo ie9 destoryRecursive on form的主要内容,如果未能解决你的问题,请参考以下文章

dojo常用函数

dojo常用函数

Dojo dojo.rawXhrPost 和 dojo.xhrPost

dojo的ready函数:dojo.ready(以前的dojo.addOnLoad)

如何将 dojo (dojo 0.x) FilteringTable 迁移到 (dojo 1.6) 中的 DataGrid?

Dojo API中文 Dojo内容模块概览,初学者