当屏幕处于“编辑”模式时,我想覆盖与元素 onclick 事件关联的函数。然后编辑完成后将原始功能放回原处。
所以,最初我有以下内容:
<script type="text/javascript">
var showAddNewForum = function(){
dojo.byId("NewForum").className = dojo.byId("NewForum").className == 'hidden'?'':'hidden';
}
</script>
<a onclick="showAddNewForum()" class="editable" id="AddNewForum" name="AddNewForum" style="cursor:pointer;">New Forum</a>
<div class="hidden" id="NewForum" name="NewForum">
<form action="">
<table>
<tr><td><label>Title</label></td><td><input type="text" id="newForumTitle"/></td></tr>
<tr><td><label>Description</label></td><td><input type="text" id="newForumDescription"/></td></tr>
<tr><td><label>Moderators</label></td><td><input type="text" id="newForumnModerators"/></td></tr>
</table>
<input type="button" value="submit"/>
</form>
</div>
页面顶部有一个管理按钮,可将页面置于配置模式。所有具有可编辑类的元素都将处于配置模式,因此可以通过一个小表单来配置该元素。这个想法是屏幕上的某些控件将根据用户 Angular 色有不同的行为。示例:如果管理员以其他方式显示,则不显示该控件。
这是通过以下方式完成的:
activateAdministration = function() {
if (editOnClickHandle.length>0) {
dojo.forEach(editOnClickHandle,function(item){dojo.disconnect(item)});
editOnClickHandle = [];
}else {
dojo.query(".editable").forEach(function(node,idx,arr){
var handler = dojo.connect(node,"onclick",function(e){
console.debug(node.onclick);
var adminWindow = document.getElementById("adminWindow");
adminWindow.className = "displayInline";
adminWindow.style.top = (e.layerY + 0) + "px";
adminWindow.style.left = (e.layerX + 0) + "px";
document.getElementById("adminElementId").value = node.id;
document.getElementById("adminCurrentUrl").value = location.href;
document.getElementById("adminClass").value = node.className;
});
editOnClickHandle.push(handler);
});
}
}
<a class="tool" style="cursor:pointer;" onclick="activateAdministration();">Admin</a>
所以问题是原来的onclick函数仍然附加到事件上。如果它是一个提交函数或类似的函数,那么它也会触发,这是不希望的。
我可以为原始函数设置一个处理程序,断开它的连接,添加新函数,然后在编辑完成后删除新函数并添加回原始函数吗?
感谢您的任何提示,我希望问题很清楚(可能不是),很乐意在需要时添加更多信息。
最佳答案
您是否控制 showAddNewForum() 函数的代码及其在 HTML 中的插入?在这种情况下,我可能只使用一个处理程序,例如:
dojo.connect(dojo.byId("AddNewForum"), "onclick", function(evt) {
if (dojo.hasClass(evt.target, "editable") {
//do the editing work here
doConfiguration(evt.target);
} else {
//do regular work here.
doRegularAction(evt.target);
}
});
要么保留连接句柄,取消注册,要么在将页面更改为配置模式时注册正确的连接句柄。
关于javascript - dojo 可以访问与 HTML 元素事件关联的功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627050/