小编Car*_*sen的帖子

javascript事件处理是在程序流程内部还是外部发生的?

这个问题与Javascript事件处理和流量控制有关,但它只是一步之遥.仍然没有答案的问题是:当一个事件被触发并且控制权返回给浏览器时,浏览器是否可以决定首先处理其他事件(由其他脚本或用户操作触发)(A),或者它总是直接处理我的事件(B)?

javascript事件处理是在程序流程之外(A)还是在(B)之外发生的? 这个问题很重要,因为在情况(B)中你可以依赖于在触发事件和事件处理程序之间没有任何改变的事实,而(A)不给出任何保证.

我的第一个猜测是(B),还有什么可以stopPropagation()和preventDefault()工作?但是给它第二个想法,这并不是确凿的证据.

这个问题的现实例子.我正在修改一个富文本编辑器(hallo),我希望它有这些规范:

  • 单击可编辑文本(#txt)将激活编辑器,单击#txt外部将停用它.hallo在#txt上使用模糊和焦点事件来实现这一目标.
  • 激活编辑器会打开一个工具栏,工具栏上的moused(但不在按钮上)会设置一个标志,以防止#txt上的模糊事件停用编辑器.工具栏将焦点返回到#text.
  • 工具栏按钮上的mousedown也应该阻止停用编辑器,但它应该等到click事件,执行其操作然后将焦点返回到#txt.某些操作是立即的(粗体或斜体),而其他操作则需要额外的用户输入(从下拉列表中选择).
  • 其中一些按钮打开一个对话框.
  • ...我希望所有这些元素(编辑器,工具栏,对话框)都是模块化的,并且可以轻松扩展.

现在,在大多数情况下,当您关闭对话框时,您希望焦点返回到#txt.但是如果打开对话框并单击页面上的其他位置,编辑器将关闭并调用工具栏,包括要关闭的对话框.如果在这种情况下对话框将焦点返回到编辑器,它将再次激活编辑器.

据我所知,事件处理顺序至少是确定性的.某些事件可能会延迟,而其他事件则会提前处理.这就是'同步'的含义.例外情况当然是加载文件等事件.

从程序组件的角度来看,比如对话框,情况可能非常难以预测.它可以将处理程序绑定到open事件,然后调用dialog("open"),但是在调用和处理程序之间可能发生任何事情,只是因为编辑器在同一事件上有一个事件处理程序.

所以我的结论是1)是的,它是可预测的,但2)它需要一个复杂的架构来实现这一点.

javascript event-handling program-flow

10
推荐指数
1
解决办法
386
查看次数

Angular 2路由,如何访问url中的语言参数

我正在构建一个应用程序,其中第一个url段代表界面的语言,如:

/en/customer/3
/en/shop
Run Code Online (Sandbox Code Playgroud)

我的路由器设置如下:

{ path: ':lang/customers/:id', component: CustomerComponent },
{ path: ':lang/shop', component: ShopComponent },
Run Code Online (Sandbox Code Playgroud)

我想在引导的AppComponent或翻译服务中使用url(本例中为lang ='en')中的语言参数.我可以在ShopComponent和CustomerComponent中访问此参数,但代码中没有其他地方.当我在AppComponent中输入时:

constructor(private activatedRoute: ActivatedRoute, private router : Router) {
}

ngOnInit() {
  this.router.routerState.root.params.subscribe((params: Params) => {
    console.log('params: ',params);
  }
  this.activatedRoute.params.subscribe((params: Params) => {
    console.log('params: ',params);
  }
}      
Run Code Online (Sandbox Code Playgroud)

我得到两个空物.url param也是空的.

我究竟做错了什么?也许更重要的是,我显然缺少对路由器的一些概念性理解,但我在文档或其他地方找不到任何有用的信息.

谢谢你的帮助!

url-routing angular2-routing angular

7
推荐指数
2
解决办法
5124
查看次数

如何为jQuery小部件实例创建唯一的id?

我正在创建一个基于jQuery小部件的富文本编辑器,它可以在页面上有多个实例.第一个实例应生成如下工具栏:

<input type="checkbox" id="bold-1"><label for="bold-1">..
<input type="checkbox" id="italic-1"><label for="italic-1">..
...
Run Code Online (Sandbox Code Playgroud)

第二个实例应该生成:

<input type="checkbox" id="bold-2"><label for ="bold-2">..
<input type="checkbox" id="italic-2"><label for ="italic-2">..
Run Code Online (Sandbox Code Playgroud)

标签'for'属性需要唯一引用其对应的输入'id'属性.因此,我需要为每个实例添加唯一的ID.

这样的东西可以工作,但我不想在全局命名空间中存储一个计数器:

var textEditorCount;
$.widget("myEditor.textEditor", {
   _create: function () {
      textEditorCount = textEditorCount ? textEditorCount + 1 : 1;
      this.instanceID = textEditorCount;
   },
   ...
};
Run Code Online (Sandbox Code Playgroud)

也许问题归结为:(如何)我可以在窗口小部件的命名空间中存储变量?

jquery unique widget instance

4
推荐指数
2
解决办法
2430
查看次数