另一个 JavaScript 事件处理程序

标签 javascript event-handling

所以我想做的是,当另一个按钮(#settings-ico)上发生点击事件时,在一组元素(图 block )上添加一个事件处理程序。

因此进行描述:“启用”开关后,一组元素将获取事件处理程序 <.onClick>,因此当其中一个元素发生单击时,将显示一个对话框。

但我的代码实际发生的情况是,“启用”按钮后,对话框立即显示,而不是等待单击其中一个元素。

eventsHandler       : function() {

    var self = this;

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -  *
    // - - - - - - - - - - - - - -               binded events  *


    $("#settings-ico").on("click", function() {

        console.log('settings-ico enabled');

        if(!self.editOn) {

            $(".b-row > a").on("click", tileOpenDialog() );
            self.editOn = 1;
        }
        else {

            $(".b-row > a").off("click", tileOpenDialog() );
            tileEditClose()
            self.editOn = 0;
        }
    });

    $("#tile-edit-save").on("click", tileEditSave );

    $("#tile-edit-close").on("click", tileEditClose );

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -  *
    // - - - - - - - - - - - - - -             helper functions *


    function tileOpenDialog( ) {

        //e.preventDefault();
        var id = $(this).prop('id');
        self.editId = id;
        $( "#tile-edit" ).css("display", "block");
        console.log("${id} clicked");
    }
    // - - - - - - - - - - - - - - - - - - ^

最佳答案

注册事件监听器时不应该及时调用事件处理函数:

$(".b-row > a").on("click", tileOpenDialog() );

应该是:

$(".b-row > a").on("click", tileOpenDialog );

关于另一个 JavaScript 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49928308/

相关文章:

javascript - 仅使用 Math.random 生成的第一个数字

javascript - 我无法从本地文件运行 facebook js api?

javascript - Onclick 应该关闭其他打开的元素

java - 如何将事件传递给其他对象?

c# - 私有(private)EventHandler和私有(private)事件EventHandler的区别?

javascript - 按顺序生成数字

javascript - chrome for mobile 忽略高度 100%

javascript - 通过javascript触发自动弹出列表选择事件

VB.NET: "AddHandler"通过将 Handler 函数指定为变量

c# - 设计帮助——多态事件处理