使用 Javascript 函数创建 DOJO 按钮导致创建的按钮发生冲突

Creating DOJO buttons with Javascript function causing conflicts in buttons created

对于任何英语错误,我深表歉意,我是巴西人。

我有一个带有 DOJO 库的网站,我在很多地方都用到了它。

我在 javascript 中创建按钮时遇到一些困难。

我写了一个函数来创建按钮,它正在运行,正在创建按钮。

但是,当创建一个新按钮时,之前的按钮丢失了事件"onclick"。

可以在这里查看:http://jsbin.com/xuzevi/edit?html,js,output

为了创建按钮,我使用了以下代码:

require([ 'dojo/dom', 'dojo/parser', 'dijit/form/Button', 'dojo/domReady!' ], 
        function( dom, parser, Button)
        {
            var div_Compra = document.getElementById(p_Div);
            if( ! div_Compra ) { console.log('ERRO - div_Compra: '+p_Div); return false; }

            var botao = new Button({ label: '' });
            if( ! botao ) { console.log('ERRO - botao'); return false; }

            botao.startup();
            botao.set('iconClass', 'dijitEditorIcon dijitEditorIconSelectAll');
            botao.set('showLabel', false);
            botao.placeAt(div_Compra);
            botao.on('click', function() { Mensagem(p_Indice); }); 
        }
);

谢谢。

问题不在上述代码中。主要问题是您在 CPR_Compra.Cadastro 方法中使用了 innerHTML。你不可能认为,dojo dijit 只是 HTML 个标签,它们是 DOM 个对象、节点等等。当您更新 div_Cadastro.innerHTML 时,它有点破坏了 wigit,但保留了 HTML 标签,因此 onclick 事件停止工作。

而不是使用 innerHTML 使用 appendChild,这样 dom 节点就不会被破坏。下面是带有工作实现的 JSBin。

http://jsbin.com/butacuquza/edit?js,output

来自 https://davidwalsh.name/dojo-widget

  • 要以编程方式创建小部件,您需要创建 DOM 个节点作为未来小部件的占位符

并阅读:https://davidwalsh.name/dojo-behavior

  • 使用 dojo.behavior

    创建小部件
    • 创建小部件是使用 dojo.behavior:
    • 的更好机会

对于像我一样来到这里的其他人,还有一些链接:

HTML DOM appendChild() 方法

Node.appendChild() 方法将一个节点添加到指定父节点的子节点列表的末尾。