TLDR下面 JS Fiddle To Demo替代錯誤地觸發事件
我已經真正參與重建是首映JS庫的基礎,以便更好地提高我的技能的工具。目前,我正在研究綁定Angular的函數式數據。
數據綁定的想法是獲取數據並將其綁定到元素,這樣如果操作,所有訂閱的元素都會相應地改變。我已經完成了它的工作,但有一件事我沒有考慮到它是innerHTML vs value的問題。根據你需要改變一個或另一個的元素(在上面的演示中,你會看到我需要在條件語句中專門選出按鈕元素,因爲它同時具有,但這是一種邊緣情況)
問題是,爲了捕獲我需要觸發事件發生的SPAN標記更新,最簡單的操作爲Text Boxes/Textareas是'keyup'。
在我的函數中,如果你傳遞一個沒有value屬性的元素,我們假設你將更新innerHTML,並且設置一個觀察者來確定元素是否曾經發生過變化,如果它曾經發生過,觀察員將發出'keyup'事件。
if (watchee.value == void(0)) {
var keyUpEvent = new Event('keyup');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
watchee.dispatchEvent(keyUpEvent);
});
});
observer.observe(watchee, {
childList: true
});
}
現在,它可能只是我的妄想,但似乎我可能是隧道到一罐蠕蟲通過僞造「KEYUP」這本身不具有支持的元素。
TLDR:
我很好奇,如果有做的另一種方式,酸當量除了僞造'keyup'/'keydown'/'change'事件之外,span標籤是否反應?例如,是否有一種方法可以使我自己的純事件(純粹我的意思是不依賴於其他事件)檢查innerHTML或值是否已更改,然後執行函數?我知道這可能是一個計時器,但我覺得這可能會妨礙表現。
編輯:就在旁邊。在演示中,名爲hookFrom的函數通過獲取DOM節點並返回一個函數,該函數將接收dom節點並繼續返回一個函數,該函數將接收其他接收dom節點。 :
hookFrom(sender)(receiver);
hookFrom(sender)(receiver)(receiver2);
hookFrom(sender)(receiver)(receiver2)(receiver3)(receiver4)...(receiver999)...etc
JS Fiddle To Demo (same as above)