Javascript Dojo委托给DOM元素';身份证

Javascript Dojo委托给DOM元素';身份证,javascript,dojo,Javascript,Dojo,我正在使用一个JSP,它动态地包含DOM元素,例如基于用户权限或其他因素的按钮 现在,在我的JS中,我使用了: dojo.connect(dojo.byId('dispatchBtn'),'onclick',function(){//logic} 问题是,如果“dispatchBtn”不存在,因为它是基于用户权限剥离的,JS只调用“//逻辑”的所有内容 我试图将此呼叫更改为: eventView.delegate(dojo.byId('dispatchBtn'),'onclick',functi

我正在使用一个JSP,它动态地包含DOM元素,例如基于用户权限或其他因素的按钮

现在,在我的JS中,我使用了:
dojo.connect(dojo.byId('dispatchBtn'),'onclick',function(){//logic}

问题是,如果“dispatchBtn”不存在,因为它是基于用户权限剥离的,JS只调用
“//逻辑”
的所有内容

我试图将此呼叫更改为:
eventView.delegate(dojo.byId('dispatchBtn'),'onclick',function(){//logic}


但这似乎根本不起作用,即使对于确实存在的按钮也是如此。在不显式测试按钮是否存在的情况下,最好的方法是什么?我不想更改这些按钮元素上的标记,没有其他类,只想通过ID引用它们。

为什么不赞成检查按钮是否存在?这使得最有意义

var btn = dojo.byId("dispatchBtn");
 if(btn) {
    on(btn, 'onclick', function() {});
}

您可以像jquerylive那样在文档级别进行绑定

require(["dojo/on", "dojo/query"], function(on){
  on(document, "#dispatchBtn:click", function(evt){
        alert("Clicked on node " + this.id);
  });
});

Fiddle:

顺便说一句,为什么dojo.connect会表现得好像语句根本不存在,并继续使用所有逻辑?它不应该只是出错而不运行吗?如果我理解您在做什么,您的JSP(服务器端代码)正在根据逻辑决定添加或不添加按钮元素。然后,客户端逻辑将这些按钮连接到单击时要执行的操作。但是,如果按钮现在被注入…然后呢。这“感觉”像是一个糟糕的设计。我想说,尝试“dojo.connect”是无效的为什么不让JSP注入按钮(以便它们始终存在)如果不需要,就把它们隐藏起来。我不明白你说调用//逻辑是什么意思。一个不存在的元素是如何触发事件的?@Kolban我不想隐藏按钮,以防没有适当权限的人决定关闭JS或做一些让这些按钮再次出现的事情。然后是的,如果他们关闭JS,当按下按钮时执行任何操作的代码都不会运行,所以我想这不是一个坏主意。@MattR这正是我的问题,基本上它执行匿名函数中的任何操作,即使按钮不存在。它的行为就像dojo.connect调用不存在一样,只是继续执行所有操作调用中的逻辑…对我来说没有任何意义。好吧,我不会说我反对它,我只是想避免额外的代码行,如果Dojo函数没有导致元素不存在时执行
//logic
。(就像我看到的connect函数的问题一样)