2017-02-01 41 views
0

我做了一個可重用的表視圖,它採用表定義(JSON數組)和數據(JSON)並使用JavaScript呈現表。我使用mvc模式創建表,如更新爲es6的here無法獲取Javascript自定義事件發動onkeyup,onchange等

我在視圖中硬編碼的事件,在我的模型,視圖和控制器的實例內工作很好。這些事件就像「addRowClicked」和「modelChanged」,然後調用回調函數進行操作。

例如在視圖我創建的事件:

this.addRowClicked = new CIEvent(this); 

在控制器附上回調:

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

然後創建視圖時我可以通過一個按鈕陣列與事件創建按鈕的名稱,並附上點擊時事件的通知方法

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

因此,所有的作品完美,非常棒!

現在我試圖添加自定義事件,但沒有運氣。自定義事件就像「updateQuantity」,這對於表的一個實例是唯一的。 updateQuantity會在更改時從輸入元素中被觸發,並將總結指定的單元格並將該總和放入不同的單元格中。

我想我應該能夠簡單地在視圖中創建時,附加回調控制器上,然後裝上事件通知的onchange或...的onkeyup等

但是,這是行不通的。

這裏是整個過程的某些提取的代碼....

要建立我做這個表:

​​

現在我添加事件「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(); 
     }); 

修改元素時,我沒有得到任何響應。

我希望我缺少一些基本的東西。謝謝大家!

回答

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

相關問題