相关疑难解决方法(0)

什么是事件冒泡和捕获?

事件冒泡和捕获之间有什么区别?在这两个中,哪个是更快更好的模型?

javascript event-bubbling dom-events

982
推荐指数
7
解决办法
37万
查看次数

在我自己的对象中实现事件

我想要的是一个提供一些事件的自定义对象.例如:

var CustomObjectTextChangedEventName = 'textChanged';
var CustomObject = function () {
    var _this = this;
    var _text = "";

    _this.OnTextChanged = document.createEvent("Event");
    _this.OnTextChanged.initEvent(CustomObjectTextChangedEventName, true, false);

    _this.ChangeText = function (newText) {
        _text = newText;
        fireTextChanged();
    };

    function fireTextChanged() {
        _this.dispatchEvent(_this.OnTextChanged);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用该事件的代码如下所示:

myCustomObject = new CustomObject();
myCustomObject.addEventListener(CustomObjectTextChangedEventName, handleTextChanged, false);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的......在JS中使用事件的默认方式.但我不能让它变得烦人......

目前我的问题是我的对象没有实现"addEventListener"和"dispatchEvent".但是这个功能是从"元素"正常实现的......

我可以以某种方式提供它们,还是我必须为自己实现它们?我该如何实施它们?我是否必须实施自己的事件处理?(具有处理程序的内部列表,"添加" - 和"删除" - 处理程序功能,并在我要触发事件时触发每个处理程序)

问候!

javascript javascript-events

9
推荐指数
1
解决办法
5810
查看次数

如何在javascript中将一个eventListener添加到一个Object中,当对象被操作时会触发它?

我有一个复杂的UI结构,动态操作,并说我有一个ui_state对象,我保持用户的最新UI状态,如哪个选项卡可见,该选项卡内的内容等.

例如:

var ui_states = {
  tabs : [
    {
      name     : "some tab",
      active   : true,
      children : { ... }
    },
    {
      name     : "some other tab",
      children : { ... }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我保持这个html5 localStorage,当用户刷新网站时,它重新打开页面.每次UI更改时,此对象都会相应更改.在改变它之后我需要运行让我们说updateLocalStorage()哪个工作完美.

我的问题是这个流程,我可以为我的ui_states对象创建一个自定义事件,就像每次操作对象时ui_states.addEventListener('onchange', function(){ // do stuff })不运行该updateLocalStorage()函数一样吗?

谢谢.

javascript events event-handling javascript-events

8
推荐指数
1
解决办法
1万
查看次数

如何在express.js中使用服务器发送事件

我使用express.js设置了REST服务器。现在,我想向该服务器添加sse。实现 sse程序包后,出现错误。我知道我收到此错误,何时尝试使用res.send两次,但我没有。

ERROR: Error: Can't set headers after they are sent.                                            
    at ServerResponse.OutgoingMessage.setHeader (http.js:690:11)                            
    at ServerResponse.header (/home/root/node_modules/express/lib/response.js:718:10)         
    at ServerResponse.send (/home/root/node_modules/express/lib/response.js:163:12)            
    at app.get.str (/home/root/.node_app_slot/main.js:1330:25)                                 
    at Layer.handle [as handle_request] (/home/root/node_modules/express/lib/router/layer.js:95:5)    
    at next (/home/root/node_modules/express/lib/router/route.js:131:13)                       
    at sse (/home/root/node_modules/server-sent-events/index.js:35:2)                          
    at Layer.handle [as handle_request] (/home/root/node_modules/express/lib/router/layer.js:95:5)  
    at next (/home/root/node_modules/express/lib/router/route.js:131:13)                          
    at Route.dispatch (/home/root/node_modules/express/lib/router/route.js:112:3)
Run Code Online (Sandbox Code Playgroud)

是否有可能我无法在sse函数中使用express方法?例如:

app.get('/events', sse, function(req, res) {
    res.send('...');
});
Run Code Online (Sandbox Code Playgroud)

此外,我发现这个解决方案,这个。是否可以res.write在不使用其他软件包的情况下通过该函数或其他方式使用sse ?

javascript node.js express server-sent-events

5
推荐指数
2
解决办法
1万
查看次数