Я бы хотел перегрузить функцию, связанную с событием 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>
В верхней части страницы есть кнопка администратора, которая переведет страницу в режим настройки. Все элементы с классом editable будут в режиме конфигурации, поэтому элемент можно настроить с помощью небольшой формы. Идея заключается в том, что определенные элементы управления на экране будут иметь различное поведение в зависимости от роли пользователя. Пример: если администратор показывает это по-другому, не отображать элемент управления.
Это делается с помощью следующего:
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 все еще прикреплена к событию. Если бы это была функция отправки или что-то в этом роде, она также сработала бы, что нежелательно.
Могу ли я установить обработчик для исходной функции, отсоединить его, добавить новую функцию, а затем по завершении редактирования удалить новую функцию и добавить исходную обратно?
Спасибо за любые советы, я надеюсь, что вопрос ясен (вероятно, нет), рад добавить дополнительную информацию, если это необходимо.