月度归档:2010年12月

jQuery validation 与 tinyMCE编辑器的故事

项目使用了jQuery validation验证插件,但是与tinyMCE拍档时,就来问题了。

1、验证错误信息显示在编辑器上方了。

2、tinyMCE的值不能及时赋给绑定的输入框,非空验证第一次总是失败的。

自己开始时候想了几个解决方案,但是统统失败了,查两个各自的api,浩如烟海,不是那么容易找到自己需要的。

后来Google到官方作者的解决方案,恩,很好。

DEMO: http://jquery.bassistance.de/validate/demo/tinymce/

Continue reading jQuery validation 与 tinyMCE编辑器的故事

jQuery 1.4.3 form bug

这个版本,当Form中存在name=”id”时候, form对象成为[form#[object HTMLInputElement]](注:这个是input type=”hidden” name=”id”的情况), 而且form.find()下面的元素时候找不到了,你将find nothing。困惑了半天,去Google了一下“jquery id name=”id””, 发现官方有报这个bug了(原来早被人发现了。。。囧),
bug地址:http://bugs.jquery.com/ticket/7324

所以升级到1.4.4版本吧,这样就好了。

ToFishes系列jQuery插件之Element Flash – 元素闪烁

先给代码:

/**
 * @author ToFishes
 * 根据指定css属性闪烁的插件
 */
;(function($){
	$.fn.jFlash = function(c){
		c = $.extend({
			css: {}, //闪烁变化的css属性
			time: 100, //interval time 闪烁间隔时间
			count: 20, //闪烁的次数
			status: "jFlashing", //表示闪烁中
			onStop: function(t){} //闪烁完的回调函数,传入闪烁对象的引用
		}, c);

		return this.each(function(){
			var _t = $(this), init = {};
			/* 如果正在闪烁中,则回避再次调用闪烁 */
			if(_t.hasClass(c.status))
				return;

			for(var n in c.css) {
				init[n] = _t.css(n);
			};

			var params = {
				"0": init,
				"1": c.css
			},  flashId, count = c.count % 2 == 0 ? c.count : c.count + 1; //count保证为偶,这样最后的css才是最初的状态。

			function flash(){
				_t.css(params[count % 2]).addClass(c.status);
				count--;
				if(count < 0) {
					c.onStop(_t.removeClass(c.status));
					flashId && clearTimeout(flashId);
					return;
				};
				flashId = setTimeout(flash, c.time);
			};
			flash();
		});
	};
})(jQuery);

距离上午发布的代码没多久,现在是晚间10点,偶对代码又做了下修改,但是同时偶觉得上面的代码可以算是另外一种解决方案,因为闪烁不会被中途打断。现在修改后,也只是改了下闪烁中途可以打断并执行另外一段闪烁而已。

同时,做了个Demo页面,查看Demo点击这里 .

Ok,修改后的代码如下:

/**
 * @author ToFishes
 * @version 1.0
 * 根据指定css属性闪烁的插件
 */
;(function($){
    $.fn.jFlash = function(c){
        c = $.extend({
            css: {}, //闪烁变化的css属性
            time: 100, //interval time 闪烁间隔时间
            count: 20, //闪烁的次数
            status: "jFlashing", //表示闪烁中
            onStop: function(t){} //闪烁完的回调函数,传入闪烁对象的引用
        }, c);
 
        return this.each(function(){
            var _t = $(this), init = _t.data("initCss") || {};
            /* 如果正在闪烁中,则清除当前的,继续调用下一个闪烁 */
            if(_t.hasClass(c.status)) {
				_t.css(init);
                clearTimeout(_t.data("jFlashId") || 0);
			};

	        for(var n in c.css) {
                init[n] = _t.css(n);
            };
			_t.data("initCss", init);
 
            var params = {
                "0": init,
                "1": c.css
            },  flashId, count = c.count % 2 == 0 ? c.count : c.count + 1; //count保证为偶,这样最后的css才是最初的状态。
 
            function flash(){
                _t.css(params[count % 2]).addClass(c.status);
                count--;
                if(count < 0) {
                    c.onStop(_t.removeClass(c.status));
                    return;
                };
                flashId = setTimeout(flash, c.time);
				_t.data("jFlashId", flashId);
            };
            flash();
        });
    };
})(jQuery);