大佬教程收集整理的这篇文章主要介绍了jQuery插件也适用于动态创建的元素,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>< a href =“某处”data-openmode =“NewWindow”class =“openmode”/>
>< a href =“某处”data-openmode =“Modal”class =“openmode”/>
>< a href =“某处”class =“openmode”/> <! - 未指定 - >
第一个应该在新窗口中打开,第二个在一个模态对话框中打开,第三个应该使用本机行为打开(无论目标在标签上设置).
(function ($) { $.fn.myOpenMode = function () { return this.mousedown(function () { var $this = $(this); var mode = $this.data("openmode"); var href = this.href; var handled = true; if (modE) { switch (modE) { case "NewWindow": case "1": window.open(href,"_blank"); break; case "Dialog": case "2": openAsDialog(href); break; // Actually,there are other options,but I removed them for clarity default: handled = false; } } else { handled = false; } return !handled; }); }; })(jQuery);
$(function(){ $(".openmode").myOpenMode(); });
这适用于静态生成的标签.但是,我的应用程序可能动态生成标记(大部分时间使用jsRender,但这并不重要).
但是,因为这个行为是在javascript文件被加载时设置一次,所以不会采取动态生成的对象.
我应该怎么处理我的要求?
$(function(){ $(document).on("load",".openmode",function() { $(this).myOpenMode(); }); });
我明白这不行,因为“加载”事件不起泡
>我正在考虑修改我的插件,将“on”放在插件中,但是我不喜欢这个想法,因为它在插件中引入了一些超出范围的行为
>我也可以在创建动态节点时调用该插件,但也会将依赖关系引入其他部分.我的插件不会像我想要的一样自主.
有没有人有建议来处理我的要求,保持我的插件尽可能隔离?
这应该适用于IE8和更高版本(最好与其他浏览器)
您应该专注于让您的插件提供机制,例如:
(function($) { $.fn.openmode = function(cmd) { cmd = cmd || 'on'; switch (cmd) { case 'click': // read props,open windows,etc break; case 'on': this.addClass('openmode'); break; case 'off': this.removeClass('openmode'); break; } }); })(jQuery);
然后允许插件用户注册触发该机制的事件处理程序,必要时使用事件委派:
$(document).on('click','a.openmode',function() { $(this).openmode('click'); });
后一个代码也可以放在jQuery命名空间中,作为一个效用函数:
(function($) { $.openmode = function(cmd) { cmd = cmd || 'on'; switch (cmd) { case 'on': $(document).on('click.openmode',function() { $(this).openmode('click'); }); break; case 'off': $(document).off('click.openmode','a.openmode'); break; } }; })(jQuery);
这样只要打电话:
$.openmode();
以上是大佬教程为你收集整理的jQuery插件也适用于动态创建的元素全部内容,希望文章能够帮你解决jQuery插件也适用于动态创建的元素所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。