标签: javascript-events

为什么事件对象不同来自jquery bind与addEventListener

为什么当我使用jQuery绑定事件对象时,我回来的事件对象与我使用addEventListener返回的事件对象不同?

这个jQuery绑定产生的事件对象没有targetTouches数组(除其他外),但addEventListener中的事件没有.是我还是不对的?

$(document).ready (function () {
    $("#test").bind("touchmove", function (event) {
        console.log(event.targetTouches[0].pageX);
        // targetTouches is undefined
    });
});
Run Code Online (Sandbox Code Playgroud)

与

$(document).ready (function () {
    var foo = document.querySelectorAll('#test')
    foo[0].addEventListener('touchmove', function (event) {
        console.log(event.targetTouches[0].pageX);
        // returns the correct values
    }, false);
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery events javascript-events

15
推荐指数
1
解决办法
9534
查看次数

在IE中模拟W3C事件捕获模型

是否可以在Internet Explorer中模拟事件捕获?

一个例子:

<a>one</a>
<a>two</a>
<a>three3</a>

<script>
var links = document.getElementsByTagName("A");
for (var i=0; i < links.length; i++) {
  links[i].onclick = function(){
    alert("clicked");
  };
}
</script>

我想阻止所有这些点击事件被触发.我可以用一个事件观察者做到这一点:

document.addEventListener("click", function(e) {
    e.stopPropagation();
    e.preventDefault();
}, true);

我怎么能在IE中做同样的事情?IE <9不支持addEventListener.它确实支持attachEvent,但它没有useCapture选项.

我找到了setCapture方法,但它看起来与W3捕获模型无关.

events internet-explorer dom event-handling javascript-events

15
推荐指数
1
解决办法
3827
查看次数

stopPropgation会阻止事件在捕获阶段传播吗?

我正在查看http://www.quirksmode.org/js/events_order.html,这部分内容不明确:

在Microsoft模型中,您必须将事件的cancelBubble属性设置为true.

window.event.cancelBubble = true
Run Code Online (Sandbox Code Playgroud)

在W3C模型中,您必须调用事件的stopPropagation()方法.

e.stopPropagation()
Run Code Online (Sandbox Code Playgroud)

这会阻止事件在冒泡阶段的所有传播.

所以我的问题是:

  • 当事件侦听器设置为在捕获阶段侦听时,它是否会自动不继续传播到内部元素?
  • 或者,如果它继续传播,是否会e.stopPropagation()停止传播,或者这只适用于泡沫阶段?

javascript javascript-events event-bubbling event-propagation

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

Chrome扩展程序 - 第一个链接在弹出窗口中自动聚焦

如何停止我的Google Chrome扩展程序的默认操作以自动关注我的第一个链接popup.html?我知道我可能会用JS做一些迂回的黑客攻击或改变:聚焦CSS,但我认为这会抛弃我想要做的其他事情,我宁愿停止它的根本原因.

javascript-events tabindex google-chrome-extension autofocus

15
推荐指数
3
解决办法
2380
查看次数

JavaScript事件系统是否违反了LSP?

我更多地是出于好奇而不是真正关心它,但我一直想知道JavaScript事件系统是否违反了Liskov替换原则(LSP).

通过调用EventTarget.dispatchEvent,我们可以调度一个Event可能由注册处理的任意类型EventListener.

interface EventListener {
  void handleEvent(in Event evt);
}
Run Code Online (Sandbox Code Playgroud)

如果我正确理解LSP,那就意味着不anyEventListener.handleEvent(anyEvent)应该失败.但是,通常情况并非如此,因为事件侦听器通常会使用专用Event子类型的属性.

在不支持泛型的类型语言中,该设计基本上需要将Event对象向下转换为期望的子类型EventListener.

根据我的理解,上述设计可能被视为违反LSP.我是否正确或type通过注册监听器提供的简单事实EventTarget.addEventListener可以防止LSP违规?

编辑:

虽然每个人似乎都在关注Event子类没有违反LSP的事实,但实际上我关注的是EventListener实现者会通过加强EventListener接口的前提条件来违反LSP .void handleEvent(in Event evt)合同中没有任何内容告诉您通过传递错误的Event子类型可能会破坏某些内容.

在具有泛型的强类型语言中,接口可以表达为EventListener<T extends Event>使得实现者可以使合同明确,例如SomeHandler implements EventListener<SomeEvent>.

在JS中,显然没有实际的接口,但事件处理程序仍然需要符合规范,并且该规范中没有任何内容允许处理程序判断它是否可以处理特定类型的事件.

这不是一个真正的问题,因为不希望监听器自己被调用,而是EventTarget被注册并与特定类型相关联的监听器调用.

我只是对根据理论是否违反LSP感兴趣.我想知道是否要避免违规(如果理论上认为是这样),合同将需要像以下那样(尽管它在实用主义方面可能做得更糟糕):

interface EventListener {
  bool handleEvent(in Event evt); //returns wheter or not the event …
Run Code Online (Sandbox Code Playgroud)

javascript liskov-substitution-principle javascript-events

15
推荐指数
1
解决办法
295
查看次数

如何使用javascript/jquery写onshow事件?

我的页面上有一个锚标记,我想要一个附加到它的事件,当这个元素的显示发生变化时会激活.

我怎么写这个活动?并且只要这个元素的显示发生变化就会捕获?

html javascript jquery dom javascript-events

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

鼠标位置 - 跨浏览器兼容性 - Javascript

在Javascript中使用鼠标我偶尔会遇到以下事件属性:

  • clientX,clientY
  • layerX,layerY
  • offsetX,offsetY
  • pageX,pageY
  • screenX,screenY
  • x,y

我想知道他们的跨浏览器兼容性一般是什么样的,因为我只找到了我想要一起修补的信息片段.

多谢你们

javascript mouse javascript-events

14
推荐指数
1
解决办法
5342
查看次数

如何在JavaScript中实现原子操作(并发模型)?

说,我想在每次获得ajax响应时递增计数器.我不知道使用JavaScript异步事件的并发模型.有什么想法吗 ?

javascript concurrency javascript-events

14
推荐指数
1
解决办法
7508
查看次数

当OS X滚动条样式发生变化时是否会触发浏览器事件?

OS X Lion及以上版本允许用户打开/关闭iOS风格的浮动滚动条 - 可以通过"系统偏好设置"手动打开,也可以通过插入鼠标来打开/关闭.

基于WebKit的浏览器(也许是Opera?)会立即切换它们的滚动条样式 - 当发生这种情况时是否会触发事件?(WebKit-only很好)


一些说明:

  • NSPreferredScrollerStyleDidChangeNotification当用户切换滚动条样式时,OS X将触发

  • WebKit似乎没有订阅此事件(在grepping时没有命中).

  • 我怀疑WebKit是通过NSViewBoundsDidChangeNotification事件来处理这个事件(我假设,它会触发滚动视图的内容视图).

  • WebKit的处理这个事件中-[WebHTMLView _frameOrBoundsChanged],这似乎是一个潜在的重新布点点.

  • 在这个案例中也提到了这个通知WebPDFView和检查员WebNodeHighlight- 这两者似乎都没有关系.

  • -[WebDynamicScrollBarsView adjustForScrollOriginChange] 似乎表明事件可能不会被解雇(如果是这样,看到一些确认会很高兴)


轮询更改对我来说不是一个可接受的答案(性能和用户更改值后的布局跳转).

javascript macos webkit javascript-events osx-lion

14
推荐指数
1
解决办法
496
查看次数

事件捕获,事件冒泡和jQuery.on()

我有一个有趣的问题关于事件捕获,冒泡和jQuery.on().

我最近了解了更多关于事件捕获和事件冒泡之间的区别以及两者如何在DOM中的子父元素之间进行不同的流动.

因此,要添加具有"事件捕获方向"的事件侦听器,我将使用:

element.addEventListener("click", myFunction, true);

并添加一个事件监听器与"事件泡沫方向"我会使用:

element.addEventListener("click", myFunction, false);

这一切都很好,但我想知道的是当使用jquery.on()添加事件监听器时,如何在捕获和冒泡方面指定事件方向?

目前我使用的是:

$('parent selector').on('click', 'child selector', function(){alert('just alert something already...');});

如何告诉jQuery它需要在"事件捕获方向"或"事件冒泡方向"中添加这些事件监听器?

javascript jquery javascript-events event-bubbling event-capturing

14
推荐指数
1
解决办法
8134
查看次数