当屏幕处于“编辑”模式时,我想要超过与元素onclick事件相关的功能。然后完成编辑后,将原始功能恢复。可以使用dojo访问与HTML元素事件关联的功能吗?
所以,本来我有以下几点:
<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>
在页面的顶部有一个管理员按钮,将放在页面的配置模式。所有具有可编辑类的元素都将处于配置模式,因此元素可以通过一些小形式进行配置。这个想法是基于用户角色,屏幕上的某些控件将具有不同的行为。例如:如果管理员以其他方式显示,则不显示该控件。
这是通过以下完成:
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功能仍连接到该事件。如果它是一个提交函数或类似的东西,那么它也会触发不需要的东西。
我可以设置一个处理程序的原始功能,dissconnect它,添加新的功能,然后编辑完成后,删除新的功能,并添加回原来的?
感谢您的任何提示,我希望这个问题很明显(可能不是)很高兴地添加更多的信息,如果需要的话。
干净而干净我喜欢它。我觉得很愚蠢。从节点获取原始点击事件要干净得多。 – Mark 2009-10-30 13:48:21
工作很好,我不得不改变是admin_mode = true;到admin_mode =!admin_mode;这样它会切换。 – Mark 2009-10-30 15:33:08