所以我要做的是在另一个按钮(#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");
}
// - - - - - - - - - - - - - - - - - - ^
答案 0 :(得分:3)
注册事件监听器时,不应该及时调用事件处理函数:
$(".b-row > a").on("click", tileOpenDialog() );
应该是:
$(".b-row > a").on("click", tileOpenDialog );