當屏幕處於「編輯」模式時,我想要超過與元素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