功能描述:点击按钮实现复制之后跳转
1. 标签上直接添加onclick事件:
<div class="btn watch-btn" onclick="handle()">查看TA的个人主页</div>
<div class="btn watch-btn">查看TA的个人主页</div>
<script>
$(document).on('click', '.watch-btn', function(){
handle();
});
</script>
现象: handle(); 方法中有个实例化对象,之后方法2jq绑定onclick事件需点击两次才能复制成功并跳转,而方法1只要点击就可以。
提问:请问这两个方式实现onclick事件有什么区别?
第二种有点风险,当你的html元素还没加载完,js此时找不到要绑定的元素,会导致绑定失败
很多后台人员喜欢在标签上直接添加onclick方法,前段人员则习惯绑定此方法,两者没有太大的区别,习惯问题吧
直接在标签上写onclick,用js动态生成标签,onclick方法也能执行。
在js代码块中给某个标签绑定click,如果后面用js又动态生成对应标签那么click绑定的方法不会再执行
两者还是有区别的,可能我说的这种情况你没有遇见过而已
以个是写死的动作名称,一个是可以用变量来进行修改的!
第二种方式 更加好、代码显得优雅、效率、维护性更好。。。 本质利用了事件捕获、事件冒泡
(1)只在document 元素上 绑定了 click 方法, 利用 事件捕获、事件冒泡,传递事件给 子元素, 有 .watch-btn 就响应。
事实上,也是 document 元素 接收 点击事件,向下传递给子元素的,这个写法很好。。。
现在 bootstrap 里面大量运用这种写法,,值得推荐。。
(2)假如handle( )方法有变,只需改动一个地方。。更方便。。。
第一种是显示的进行绑定方法,从用户角度,可以直接就能看到你绑定的方法,然后寻到对应的方法,进行方法更改,然后触发,存在危险性。
第二种方法较第一种,可以实现绑定操作,html里标签可观性加大。而且书写的方法自由度加大。
元素上绑定onclick属于dom 0级事件
jquery on 方法绑定事件 属于dom 2级事件
第一种和第二种的效果是一样,可以附加多个事件处理函数,并不是只有使用jquery才能做到。 第三种方法不推荐使用,原则上HTML代码只能体现网页的结构,具体的行为应该使用javascript代码进行绑定。
除非页面上绑定事件的元素超过上万个,否则响应速度的时候就不必纠结了,只做个事件绑定还是很快的。我测试了一下,使用addEventListener绑定3000次,耗时3-4毫秒。
如果项目中统一使用jQuery的话,建议使用第一种做法,顺便还解决了IE的不兼容问题
jquery on有JS文件版本限制
建议使用第一种
这两个方法都是只需点击一次就可以的。方法2需要点击两次应该是其它原因引起的。
两者的区别是
方法一是直接在元素本身上绑定事件,如果有多个元素需要绑定事件。则每个元素都必须单独绑定,这样比较占用内存,也影响元素解析速度。而且这种方法同一事件只能绑定一个,当然一个事件中可以调用多个其它函数。
方法二是委托式绑定事件。事件实际是绑定在 document上的,你每次点击时都会判断事件是否是从.watch-btn冒泡上来的,是才执行事件函数。这样可以设置一次对多个元素同时生效,即使是未来创建的元素也有效,比较不占用内存。对同一事件可以绑定多次。
<script>
$(function(){
$('.watch-btn').click(handle);
});
</script>