如何让dojo监听器监听新添加的html片段's事件

How to make dojo listener listen to newly added html fragment's event?

本文关键字:片段 html 事件 添加 dojo 监听器 监听 新添加      更新时间:2023-09-26

实际上,我对DOJO的开发还很陌生。我有几个问题要问谁在DOJO开发方面有经验。

我有一些html片段是通过dojo ajax调用加载的(当index.html url链接被点击时,主html和javascript已经提前加载(,新加载的片段只更新了整个index.html中的一个div,但整个index.html保持未刷新。

在新加载的html片段中有一些DOM元素(例如一些输入字段和按钮(。我需要通过调用javascript中的一些dojo函数来访问新加载的html片段中的字段。但我从来没有得到它的工作??

我已经编写了一些dojo脚本函数作为DOM事件监听器,等待新加载的html片段并单击按钮,但我总是收到错误或根本没有响应。

我新加载的html片段为:

<span>Enter your email to sign in</span>
<br><input type="text" placeholder="your@email.com" name="email" id="email" />
<br><input type="password" placeholder="your pass word" name="password" id="password" />
<br>
<input value="Sign in" name="Sign in" id="Sign in" class="submit" data-dojo-type="dijit.form.Button" data-dojo-props="onClick: handleClick" data-dojo-id="dojo Sign in" type="submit" />Or<input value="Sign me up" name="Sign me up" id="Sign me up" class="submit" type="submit" />

我的dojo脚本为:

require(["dijit.form.Button"], function handleClick () {
  console.log("some button was clicked.");
}
);

我得到的错误信息是:

Error: scriptError
_f()dojo.js (line 15)
req.injectUrl/_10b<()dojo.js (line 15)

...}return ret;};};var _364=function(node,root){var pn=node.parentNode;while(pn){if…

我完全输了,知道吗?感谢。

更新说明:

当我添加一些更需要的模型时,我的功能看起来像:

require(["dojo/dom",
     "dojo/on",
     "dojo/parser",
     "dijit/registry",
     "dijit/form/Button",
     "dojo/domReady!"], function handleClick () {
console.log("some button was clicked.");
}
);

我得到了其他错误信息:

dojo/parser::parse() error
Error: ReferenceError: handleClick is not defined in data-dojo-props='onClick: handleClick'

throw new Error(e.toString()+" in data-dojo-props='"+_49+"'");

它没有按预期工作,假设这个函数将加载到浏览器中,然后等待DOM元素"登录"按钮被点击,如果按钮没有被点击,就不会发生脚本操作,但不幸的是,侦听器函数在脚本刚加载时被触发,无论点击按钮事件是否发生,它总是打印一个字符串"某个按钮被点击"。"在我的firebug控制台中。似乎其他任何事件都可以触发此操作。

对于错误消息,脚本似乎已经从我的MVC控制器中找到了调用方定义,它知道调用方在哪里。但他们不知道调用者(被放在一个html片段中,它将由dojo ajax调用加载,这个ajax调用将检查会话是否需要登录,如果需要登录,MVC控制器将发送这个片段,换句话说,这个片段永远不会加载。(不在这里,甚至不在DOM中。

我知道dojo支持异步函数调用,但调用程序不存在呢?或者稍后加载调用者?这就是调用者和监听器之间的关系,如果调用者不在,监听器为什么工作?如何让dojo监听器知道,调用者不在这里或者没有链接到监听器?

对不起,问题太多了,但没有按预期进行,所以我迷路了。

@Shoe的良好链接您必须再次查看Modern Dojo才能更好地了解Dojo AMD。

require(["dojo/dom", "dojo/domReady!"], function(dom){
  dom.byId("helloworld").innerHTML = "Hello New World!";
});

这是现代dojo编码的正确语法。这里的函数是在加载dojo/dom.js时调用的。如果dom.js调用define((,那么在加载了dom的依赖项之前,函数不会被激发,并且dom参数将保存dojo/util的模块值。