jQuery - 触发事件而不是设置它

时间:2017-02-23 17:45:07

标签: javascript jquery events

我有图像链接列表,并希望编写一个按钮来激活该链接上的onClick事件。所以:

'点击没有按钮' :点击链接重定向我们 '点击按钮后' :点击链接为我们带来一个编辑对话框

java script :('#settings-ico'是按钮)

eventsHandler       : function() {

    var self = this;

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -  *

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

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

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

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -  *

    function tileOpenDialog( event ) {

        event.preventDefault();
        let id = $(this).prop("id");
        this.editId = id;
        $( "#tile-edit" ).css("display", "block");
        console.log(id + ' click');
        alert(self.pageList);
    }
    function tileEditSave() {}
}

按钮是"#settings-ico",然后单击它会立即将我的编辑对话框带到我身边,而不会点击任何链接。

$( "#tile-edit" ).css("display", "block");

但我想要的是在点击一些链接后显示此对话框:

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

如何编码?为什么' titleOpenDialog()'单击按钮后触发?

1 个答案:

答案 0 :(得分:1)

当您将函数作为回调传递时,不应该调用函数。除非他们返回另一个函数,我猜。你在做:

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

当你应该做的时候:

// Passing in the named function so that it can be called
// later once the button is clicked
$(".b-row > a").on("click", tileOpenDialog);

或者,如果您想明确传递事件对象,可以执行以下操作:

// Creating and passing in an anonymous function that will be
// called later once the button is clicked, which will in turn
// call the inner function.
$(".b-row > a").on("click", function(event) {
  tileOpenDialog( event ) 
});

作为对单击#settings-ico时发生的事情的解释,基本上一旦点击它正在运行jQuery函数来选择.b-row > a。然后它在返回值上运行.on()方法并传入字符串"click",然后它运行到tileOpenDialog( event )。由于在它之后有括号,JavaScript引擎必须首先运行该函数(这就是对话框打开的原因)然后它将返回值(undefined)作为.on()的第二个参数传递。