另一个

时间:2018-04-19 18:55:27

标签: javascript event-handling

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

所以进行描述:在'启用'开关后,元素组正在获取事件处理程序< .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");
    }
    // - - - - - - - - - - - - - - - - - - ^

1 个答案:

答案 0 :(得分:3)

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

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

应该是:

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