今天在些代码时候出先了一个问题,就是关于jQuery
的on()
和click()
的不同之处。
一个问题搞出了大量知识我也是是醉了。然后我们在来说说,jQuery的事件。我也复习下。
on和click
最大区别就是用click
动态添加的事件。不会被删除。element.click()这种写法不支持给动态元素或样式绑定事件。
对比test
1 | $(function(){ |
jQuery 事件
jQuery本身封装了一些JavaSript事件。
例如:
- 绑定事件:
bind
,on
,live
,delegate
,keyup(<function>)
- 触发事件:
trigger('keyup')
,keyup()
- 解绑事件:
unbind
,off
,die
,keyup()
bind
在JavaSript中:
1 | <div onclick="func()"></div> |
然而在jQuery中;
1 | <div id='foo'></div> |
事件的解绑:
1 | $('#foo').unbind('click'); |
.bind
将会给所有匹配的元素都绑定一次事件,当元素很多时性能会变差。 而且后来动态新增的元素不会被绑定。
我上面那个问题就用.on
就比较好。
####事件冒泡
在DOM中默认情况下,事件是会冒泡的,即同样的事件会沿着DOM树逐级触发。在某些情况下我们要阻止冒泡。
有三种方法来应对不同情况:
1 |
|
Delegate
.Delegate
是另外一种绑定方式。把事件绑定中根元素上,由于事件会冒泡,它用来处理指定的子元素上的事件。
不过使用方法相对来说比较复杂。
1 | <div id="foo"> |
自动绑定动态添加的元素。因为事件处理函数绑定在#foo
上,新加的子元素事件也会冒泡到#foo
。
性能好于.bind()
。只绑定一个事件处理函数,绑定速度相当快
On
终于提到了.on
。它才是整个jQuery事件的主体。
.bind
和delegate
都可以用实现。
1 |
|