javascript - dojo 可以访问与 HTML 元素事件关联的功能吗?

标签 javascript dojo

当屏幕处于“编辑”模式时,我想覆盖与元素 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/

相关文章:

javascript - babel-loader 6.0.0 无法正常工作

javascript - XPages Domino 搜索为一个特定的搜索词产生不正确的结果

dojo - dijit.form.NumberSpinner 的递增/递减事件

javascript - 使用 dojo 的 dojox.dgauges 中的 textIndicatorPrecision

javascript - REACT JS - 如何在 map 内进行求和?

javascript - 什么是正确的方法?使用 javascript 和 mysql

javascript - 有没有办法重置JavaScript中的全局变量

javascript - 使用字符串模板代替 HTML 文件

javascript - Dojo domConstruct.toDom 函数中使用的文档参数是什么?

javascript - Dojo:如何增强dijit?