在IE8中:在vanilla JS中创建自定义事件,然后在Jquery中选取它
In IE8: Create a custom event in vanilla JS and pick it up in Jquery
所有这些都发生在IE8上。
由于脚本导入顺序,我在加载 JQuery 之前执行了一些代码,我需要触发自定义事件。
当我确定 JQuery 将被加载时,稍后将在另一段代码中选取此事件。所以我想用JQuery来接这个事件。
我看到了之前提出的问题:如何在IE8中触发自定义javascript事件?并应用了答案,这有效,但是当我尝试通过JQuery获取事件时,没有任何反应。
这是我尝试过的:
function Event() {}
Event.listen = function(eventName, callback) {
if (document.addEventListener) {
document.addEventListener(eventName, callback, false);
} else {
document.documentElement.attachEvent('onpropertychange', function(e) {
if (e.propertyName == eventName) {
callback();
}
});
}
};
Event.trigger = function(eventName) {
if (document.createEvent) {
var event = document.createEvent('Event');
event.initEvent(eventName, true, true);
document.dispatchEvent(event);
} else {
document.documentElement[eventName] ++;
}
};
Event.listen('myevent', function() {
document.getElementById('mydiv-jquery').innerText = "myevent jquery";
});
$(document).on('myevent', function() {
document.getElementById('mydiv-vanilla').innerText = "myevent vanilla";
});
Event.trigger('myevent');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv-jquery">Nothing</div>
<div id="mydiv-vanilla">Nothing</div>
PS:该代码段似乎在IE中无法正常工作。这是一个应该工作的jsfiddle。
这段代码存在一些问题。
-
隐藏内置
window.Event
而不检查它是否存在;这可能会导致其他脚本出现问题。 -
从
onpropertychange
侦听器调用回调时,不会保留this
绑定。您应该将回调应用于文档,而不是直接调用它,以便行为尽可能接近addEventListener
。 -
您尝试在未定义时递增
document.documentElement[eventName]
。第一次调用会将值更改为NaN
,因此onpropertychange
应该拾取它,但在后续调用中它将保持NaN
。 -
您不会尝试让
.on()
识别您的Event.listen
函数,因此自然Event.listen
中的代码永远不会从附加.on()
的侦听器执行。
你试过使用 Andrea Giammarchi 的 CustomEvent shim 吗?
相关文章:
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 将值输入到对象,然后该对象推送到数组
- 如何临时暂停浏览器渲染,然后恢复整个页面
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 滚动然后捕捉到顶部而不是取消捕捉
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 点击相同的按钮打开模型,然后提交表单
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 将display属性更改为visible flicks,然后再次消失
- 什么是“;选择“;然后触发事件
- 等待300毫秒,然后使用jQuery向下滑动菜单
- 从下拉列表中的数组中选取某个项目,然后将其显示为第一项并按字母顺序显示
- 在IE8中:在vanilla JS中创建自定义事件,然后在Jquery中选取它