无法获取Javascript自定义事件onkeyup,onchange等

时间:2017-02-01 15:54:42

标签: javascript

我创建了一个可重用的表视图,它采用表定义(JSON数组)和数据(JSON)并使用javascript呈现表。我使用为es6更新的here等mvc模式制作了表格。

我在视图中有硬编码事件,它在我的模型,视图和控制器的实例中工作得很好。这些事件就像" addRowClicked"和" modelChanged"然后调用回调函数进行操作。

例如,在视图中我创建了事件:

this.addRowClicked = new CIEvent(this);

在Controller上我附加了回调:

this.view.addRowClicked.attach(
        function() {
            self.addRow()
        }
    );

然后在创建视图时,我可以传递一个带有事件名称的按钮数组,该事件名称创建按钮并在单击时附加事件的notify方法

element.onclick = function () {
            self[button.event_name].notify();
        }

所以这一切都很完美,非常棒!

现在我正在尝试添加自定义事件而没有运气。自定义事件类似于" updateQuantity"这是表的一个实例所特有的。 updateQuantity会在更改时从输入元素触发,并将指定的单元格汇总并将该总和放在不同的单元格中。

我以为我可以在视图上简单地创建事件,在控制器上附加回调,然后将事件通知附加到onchange或onkeyup ...等等

但这不起作用。

以下是整个过程的一些提取代码....

要构建表格,我这样做:

 let model = new TableModel(table_definition, data);
 let view = new DataTableView(model, div, buttons);
 let controller = new DataTableController(model, view);

现在我添加活动' updateQuantity'在视图和控制器上的回调:

view.updateQuantity = new CIEvent(view);
controller.view.updateQuantity.attach(
        function() {
            console.log('update the quantity row')
        }
    );

如果我从同一个文件中调用该事件,它可以正常工作:

view.updateQuantity.notify(); // works fine

但是,如果我尝试将其附加到onclick,onkeyup等元素上,则该事件将不会触发...注释代码会动态附加,但我只是硬连线以尝试使其正常工作。我尝试直接使用像onkeyup这样的事件并使用addEventListener

        let self = this;
        // element[index] =  this[event[index]].notify(); 
        // element.onkeyup =  this.updateQuantity.notify();
        element.addEventListener("onkeyup", function(){
            // self[event[index]].notify();
            self.updateQuantity.notify();
         });

修改元素时,我没有得到任何回应。

我希望我错过了一些基本的东西。谢谢大家!

1 个答案:

答案 0 :(得分:0)

element.addEventListener("onkeyup", function(){
        // self[event[index]].notify();
        self.updateQuantity.notify();
     });

应该是

element.addEventListener("keyup", function(){
            // self[event[index]].notify();
            self.updateQuantity.notify();
         });

onkeyup应该是keyup