除DOM之外,浏览器中的事件处理API?

时间:2016-03-27 02:07:20

标签: javascript events javascript-events event-handling dom-events

我很想知道什么样的事件处理API浏览器,以及如何在一些根本不处理DOM的JavaScript逻辑中使用它们,所以我试了Event

显然,EventCustomEvent只能用于DOM,而且我没有看到任何其他API,因此我最终创建了一个&#34; dummy&#34 ; <div>元素作为事件处理程序(EventTarget),以便在代码的两个部分之间进行通信,如:

// shared file
export
let eventHandler = document.createElement('div')

// ... some other file
import {eventHandler} from './sharedFile'
eventHandler.addEventListener('foobar', function(event) {
  console.log('foobar event fired!')
})

// ... some other file
import {eventHandler} from './sharedFile'
console.log('About to trigger "foobar" event.')
eventHandler.dispatchEvent(new Event('foobar'))

这很有效,但正如您所看到的,我已经创建了一个{I}根本不会在DOM中使用的<div>元素,并且仅将其用作事件处理机制

创建一个我不会用作DOM元素的DOM元素似乎是浪费。有没有其他方法可以使用本机浏览器API,或者我们是否必须创建自己的(或使用)事件库以避免创建虚拟元素?

1 个答案:

答案 0 :(得分:0)

您可以使用javascript对象和函数来创建自己的事件总线,而无需使用DOM。

基本思想是你可以定义一个API来注册回调和调度事件,如下所示:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    if switchText.on{

      return true

    }else{

      return false
    }
  }