
目前网页是通过鼠标滚动时自动生成后续页面。页面载入完毕后会使用 JS 给现有的元素添加装饰效果。
但是对于使用 AJAX 新生成的部分,却没有效果,因为 JS 执行时查找的是现有元素,新元素生成时 JS 代码已经运行完毕了。
目前知道 jQuery 的 .on 可以绑定事件,从而有机会再次运行 JS 来添加效果。但是感觉绑定 scroll 事件不是非常理想的做法,只需要新内容产生后才再次执行,并不是每次鼠标滚动都执行那个 JS 。
没有任何点击,所以不能绑定 click 事件。那对于 ajax 生成的新内容,最好的再次应用 JS 的方法是什么呢?有没有一个 “新元素被创建” 的事件,或者第三方库可以用?
DOMNodeInserted 事件 IE 不支持,所以不能用。感觉前端的兼容性问题好麻烦。
1 tux 2015-12-06 14:42:39 +08:00 MutationObserver |
3 oott123 2015-12-06 14:59:16 +08:00 你 ajax 生成的新内容,自己在生成之后调用一下添加效果的那段函数不就好了…… |
4 FreeDog OP @oott123 也是一个办法,只是 ajax 瀑布流、 JS 特效是两个独立的插件实现,相互调用代码总觉得不太优雅。不过实用性更重要。 |
5 jas0ndyq 2015-12-06 15:24:20 +08:00 “使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。” |
6 FreeDog OP @jas0ndyq 是的,和 on() 方法作用是一样的。只是参数 eventType 不好选, jQuery 并不支持一个类似于 create 的方法。 |
7 wd0g 2015-12-06 15:46:33 +08:00 委派啊,委派对动态生成的元素也有效果 |
8 FreeDog OP @wd0g 问题就是委派需要指定一个事件,但是 jQuery 只能绑定常见的 click 等事件。下拉页面并不会产生 click 事件。 |
9 hxsf 2015-12-06 16:08:31 +08:00 @FreeDog 要么 ajax 完了直接调用一下, 要么委派一个自定义事件( ajax 完成),然后 ajax 完了触发自定义事件。。。(其实两个流程一样。。。) |
11 UnitTest 2015-12-06 16:15:49 +08:00 ajax 执行完毕之后对新的元素再绑定一下就好了. 反正请求回来知道是哪几个元素. 瀑布流和特效可以分成两个模块,回调一下就好了. |
12 Kabie 2015-12-06 16:21:15 +08:00 装饰效果为何不用 CSS 。。。 另外把 on 注册在父元素就好…… |
13 banri 2015-12-06 16:36:37 +08:00 父元素事件委托 |
14 BOYPT 2015-12-06 16:37:35 +08:00 这简直是 jquery 的日经贴啊 |
15 SourceMan 2015-12-06 16:38:50 +08:00 via Android 事件代理,事件冒泡 |
16 FreeDog OP |
18 cqqccqc 2015-12-06 23:29:36 +08:00 用委托就可以啦! |
19 bramblex 2015-12-08 08:12:41 +08:00 via Smartisan T1 绑定父元素就好,或者实在不行绑定 body 也可以玩~ |