我尝试在以如下编程方式添加domNode后运行该事件:
<a href="javascript:void(0)" data-dojo-attach-event="click:openRegistration">Register</a>
当页面第一次加载时,Dojo不会解析这个事件,因为它是稍后添加的。
parser.parse();
事件未运行。如何使此事件运行?
vfh0ocws1#
您不希望dojo解析器解析页面两次:它将冗余地解析和创建已经创建的内容,从而导致混乱。要在解析页面后以编程方式添加节点,请查看dojo/dom-construct。
require(["dojo/dom-construct", "dojo/domReady!"], function(domConstruct) { var openRegistration = function() { alert("foo"); } domConstruct.create("a", { innerHTML: "Register", click: openRegistration, href: "javascript:void(0)" }, document.body); });
将document.body替换为对要插入节点的父节点的引用,并查看第3个参数以了解放置选项。
icnyk63a2#
您应该使用onclick:openRegistration而不是click:openRegistration。
onclick:openRegistration
click:openRegistration
<a href="javascript:void(0)" data-dojo-attach-event="onclick:openRegistration">Register</a>
t5zmwmid3#
没有看到你的代码的其余部分,我猜想你有一个范围问题。或者你没有正确的dom事件-onClick您的函数需要是使用模板的同一个小部件的一部分,模板带有继承_TemplatedMixin的附加事件。
require([ 'dojo/declare', 'dijit/_WidgetBase', 'dijit/_TemplatedMixin', 'dojo/text!myNameSpace/templates/MyWidget.html' ], function(declare, _WidgetBase, _TemplatedMixin, template){ declare('MyWidget', [ _WidgetBase, _TemplatedMixin ], { templateString: template, openRegistration: function { // do stuff here } }); });
3条答案
按热度按时间vfh0ocws1#
您不希望dojo解析器解析页面两次:它将冗余地解析和创建已经创建的内容,从而导致混乱。要在解析页面后以编程方式添加节点,请查看dojo/dom-construct。
将document.body替换为对要插入节点的父节点的引用,并查看第3个参数以了解放置选项。
icnyk63a2#
您应该使用
onclick:openRegistration
而不是click:openRegistration
。t5zmwmid3#
没有看到你的代码的其余部分,我猜想你有一个范围问题。或者你没有正确的dom事件-onClick
您的函数需要是使用模板的同一个小部件的一部分,模板带有继承_TemplatedMixin的附加事件。