Register  |  Login

jQuery插件开发: Watermark Plugin

Posted in [DNN模块开发], [JQuery], [杂项] By Baldwin

最近在研究SunBlog和jQuery的整合, 不敢说有很多成就, 到此为止算是刚入门吧。jQuery最让我欣喜的是其插件式的开发模式, 这一点几乎和jQueryDNN的模块概念同出一辙。我将陆续写些文章阐述DNN和jQuery, 比如如何开发插件(jQuery Plugin), 如何利用Ajax方式调用Webservice, 如何优化UI等等。今天就简单说说如何开发jQuery插件, Google了一把, 推荐这篇文章:
原文: A Plugin Development Pattern
中文翻译版: jQuery插件开发模式
如果有兴趣开发jQuery插件不妨细读一下, 其中提到了一些值得推荐的开发模式, 在此列举一下:
1.在jQuery命名空间内声明一个特定的命名
2.接收参数来控制插件的行为
3.提供公有方法访问插件的配置项值
4.提供公有方法来访问插件中其他的方法(如果可能的话)
5.保证私有方法是私有的
6.支持元数据插件

Watermark插件就是按照以上推荐模式开发的, 其实蛮简单, 我在上篇文章(SunBlog更新:整合jQuery)曾提到过, 原始需求就是想替换Ajax Control Toolkit的TextBoxWatermarkExtender控件, 也就是实现Search输入框的水印功能(Watermark)。不过上次的解决方案不是很理想, 一旦回发(postback)就会使得所输入的任何关键字都呈现水印效果,而这不是我们想要的.故此最终决定使用jQuery插件的方式开发类似效果,以便重用. 实现代码如下:

/*
* Watermark plugin (for jQuery)
* Version: 1.0
* @requires jQuery v1.2 or later
* Created by baldwin for "SunBlog" ( http://www.dnnsun.com )
*/
(function($) {
    $.fn.watermark = function(options) {
        // build main options before element iteration
        var opts = $.extend({}, $.fn.watermark.defaults, options);
 
        return this.each(function() {
            var target = $(this);
 
            function clear() {
                if (target.val() == opts.defaultText 
                    && target.hasClass(opts.watermarkCss)) {
                    target.val("").removeClass(opts.watermarkCss);
                }
            }
 
            function renderDefault() {
                if ($.trim(target.val()) === '') {
                    target.val(opts.defaultText).addClass(opts.watermarkCss);
                }
            }
 
            // Bind the related event handlers
            target.focus(clear);
            target.blur(renderDefault);
            target.change(renderDefault);
            
            renderDefault();
        });
    };
 
    // plugin defaults settings
    $.fn.watermark.defaults = {
        defaultText: 'search',
        watermarkCss: 'watermark'
    };
})(jQuery);

不知道你是否注意到没,目前Watermark插件主要公开了两个属性defaultText和watermarkCss,defaultText就是你想默认显示在输入框里的提示文字信息, watermarkCss则是你想要呈现的水印效果样式类.故该插件的用法如下:

jQuery(document).ready(function() {
    $('.SearchEntry').watermark({defaultText:'Search Entrys',watermarkCss:'SearchWatermark'});
});
而对应的HTML标签则是:
<asp:TextBox ID="txtSearch" runat="server" CssClass="SearchEntry">

Enjoy jQuery & SunBlog!

Popular tags: SunBlog, Optimization, jQuery
Previous Entry: DotNetNuke最新架构图
Next Entry: (转载)著名.NET开源CMS系统DotNetNuke获首轮投资

Comments

Was it good for you, too? Join the discussion »

leave a reply

About the author
Baldwin's Status
 Contact Me
Baldwin Sun
Senior Developer for dnn solution & founder of SunBlog module...
网站主页
dnnsun
最新评论
  1. Re: "暴力"解决DNN无法登陆的问题

    你好 有个问题 我改了登录界面后能登录 但是一点注册 就跳到了HOME页 这个怎么解决

    --zl24622

  2. Re: 你的dnn站点慢了么?

    需要你把旁边的checkbox勾选上再执行 :)

    --Baldwin

  3. Re: 你的dnn站点慢了么?

    为什么,我将你的代码copy到host>sql中去执行之后,报错呢,语句是不是有问题哦?

    --claire

  4. Re: 剖析DNN架构-开篇之作

    很好

    --vling83

  5. Re: SunBlog更新:增加3D Tag Clouds插件

    在以上评论已说明, SunBlog已经是一个成熟的商业模块,如果需要授权或下载请邮件联系我们, 感谢你的关注, 我们即将推出一个demo的站点(这周之内).

    --Baldwin

  6. Re: SunBlog更新:增加3D Tag Clouds插件

    这个没地方下载的吗,要怎么才能下载到,谢谢

    --Sun key

  7. Re: SunBlog更新:增加3D Tag Clouds插件

    已经电邮您了,请注意查收

    --sunny0315

  8. Re: 如何添加DNN模块的自定义权限

    你只要设置好该节点即可, 比如:DnnSun.SunBlogNuke.Business.InterfaceController, DnnSun.Modules.SunBlogNuke 其他的请再详细看看本文,我觉得说得蛮清楚的 :)

    --Baldwin

Blog搜索
Rss Feed
feedsky
抓虾
pageflakes
newsgator
哪吒
相册库
更多照片请查看相册库
我们的服务
  • DotNetNuke 咨询
  • Web设计及其模块开发
  • 免费建站
  • 电子商务
  • 开拓市场
我们致力于开发定制的web 2.0 ,所服务的客户主要包括小中型企业,社区俱乐部及其非盈利机构组织。我们将利用开源的DNN作为我们核心的系统机制,更多相关信息...
版权声明
本站任何言论仅代表个人观点,与作者所在的公司没有任何关系,所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。