Javascript相当于$ .on
作为一个( 不幸的是 )学习jQuery
不是原始 javascript
我现在正在花时间用原始javascript
替换我的所有代码。 不,这不是必需的,但这对我来说是一种更容易学习的方式。 我面临的一个问题是使用原始javascript
转换我的所有$(document).on
。 我的网站是一个“单页面应用程序”,我的大部分实际HTML
都在不同的文件中,这些文件是通过Ajax
请求调用的。 所以,我的问题是,我如何查找从动态加载的内容中触发的event
? 我假设我必须向他们添加一个onclick
事件,但是jQuery
如何在不需要onclick
event
情况下完成它?
本机API中的绑定处理程序是使用addEventListener()
。
要模拟jQuery的事件委托,您可以相当轻松地创建一个使用.matches()
方法来测试您提供的选择器的系统。
function delegate(el, evt, sel, handler) { el.addEventListener(evt, function(event) { var t = event.target; while (t && t !== this) { if (t.matches(sel)) { handler.call(t, event); } t = t.parentNode; } }); }
可能有一些调整,但基本上它是一个函数,它接受元素绑定,如document
,事件类型,选择器和处理程序。
它从e.target
开始并遍历父e.target
,直到它到达绑定元素。 每次,它检查当前元素是否与选择器匹配,如果是,则调用处理程序。
所以你会这样称呼它:
delegate(document, "click", ".some_elem", function(event) { this.style.border = "2px dashed orange"; });
这是一个现场演示,它还添加了动态元素,以显示新元素也被拾取。
function delegate(el, evt, sel, handler) { el.addEventListener(evt, function(event) { var t = event.target; while (t && t !== this) { if (t.matches(sel)) { handler.call(t, event); } t = t.parentNode; } }); } delegate(document, "click", ".some_elem", function(event) { this.parentNode.appendChild(this.cloneNode(true)); this.style.border = "2px dashed orange"; });
CLICK ME
这是一个相当于 on()
的javascript
jQuery的
$(document).on('click', '#my-id', callback); function callback(){ ...handler code here }
使用Javascript
document.addEventListener('click', function(event) { if (event.target.id == 'my-id') { callback(); } }); function callback(){ ...handler code here }
使用这种方法,想法是使用event.target 。 当然,随着选择器的改变,你的代码必须更多地参与其中
- 当使用CSS过渡/动画/等时,如果用户浏览器不执行css动画,那么回退到jquery的最佳方法是什么?
- 如果我附加.on(’点击’事件到$(“body”),性能是否会受到影响?
- raphael.js – 将饼图转换为甜甜圈图
- Google未使用Google Visualization API进行定义; 可能jQuery的错
- 加载指定了#element的iframe会将父视点移动到同一位置
- jQuery Validate插件,Bootstrap,Jasny Bootstrap文件输入RegEx – validation在Firefox中工作不在Chrome / IE中
- WordPress在联系表单7中发送重定向表单数据
- 从Tinymce获取HTML值
- flot graph,使用图例打开/关闭系列