作者TonyQ (沉默是金)
看板Ajax
标题[心得]jQuery blur事件扩充
时间Thu Sep 18 15:07:19 2008
blur基本上是失焦
也就是 原本a物品是focus的状态 , 接着任意b物品变成focus()
a被移除focus状态时 , 就会呼叫blur.
但是这个event我反覆测来测去 ,
只有input跟select还有textarea是会有blur行为.
理由是只有这些元素 , 是点击时会触发 focus().
举例 ,像 div 就没有 focus的状态.
但这样就会造成我们实做一些自订元件的困扰 ,
比方说想拿 div 模拟 select 项目 .
(理由可能是外框跟选项内容可以有更大的弹性.)
──────────────────────────────────
我简单写了一个 eBlur() (e只是为了跟原本的blur作区隔)
以 click / focus 两个事件伪装成focus 的状态 ,
而以body被click跟使用者按下tab键当作是 blur() 的进入点.
节录code如後, 当然 , 这东西是不能透过bind绑定的 . :p
──────────────────────────────────
function _blur(e){
jq("[eBlur=1]").blur();
}
$(document).click(_blur).keyup(
function(e){
if(e.keyCode==9){
_blur();
}
}
);
$.pBlur=function(elem,fn){
if($.isFunction(fn)){
var jqThis=$(elem);
jqThis.bind("blur.pb",fn);
/*原本就支援fn的不作*/
if(!jqThis.is(":input,select,textarea")){
var cb=function(){
jqThis.attr("eBlur","1");
};
$(elem).bind("focus.pb",cb).bind("click.pb",cb);
}
}else{
$(elem).blur();
}
}
$.fn.pBlur=function(fn){
$(this).each(function(){$.pBlur(this,fn);});
return $(this);
};
--
What do you want to have ? / What do you have?
从书本中,你可以发现我的各种兴趣。
从CD中,你可以了解我所喜欢的偶像明星。
或许从文字你很难以了解一个人,但从物品可以。
My PPolis , My past. http://ppolis.tw/user/Tony
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.128.219.202
※ 编辑: TonyQ 来自: 220.128.219.202 (09/18 15:08)
※ 编辑: TonyQ 来自: 220.128.219.202 (09/18 15:09)
1F:→ TonyQ:好像还差个unbind :p ..需要unbind blur,focus,click事件. 09/18 15:16
※ 编辑: TonyQ 来自: 220.128.219.202 (09/18 15:24)
※ 编辑: TonyQ 来自: 220.128.219.202 (09/18 15:50)
2F:→ TonyQ:啊啊 , 果然还是有bug... :p 09/18 17:56
3F:→ contagious:我会选择用一个隐藏的 input ,做为 event 的 proxy 09/19 02:59
4F:→ TonyQ:你说的 , 我有考虑过这件事情 , 事实上那是一开始的实作. 09/19 03:23
5F:→ TonyQ:input 不能是display:none 或是 invisible . :p 09/19 03:23
6F:→ TonyQ:然後 , 另一麻烦就是因为要触发事件 , 所以要把所有对应的原 09/19 03:24
7F:→ TonyQ:素都纪录起来.(在这个例子我是借助自订属性eBlur帮忙) :p 09/19 03:25
8F:→ TonyQ:input 我那时候是采用absolute + left:-100%达到隐藏 09/19 03:26
9F:→ TonyQ:如果用跑出画面外的方式隐藏的 input , 就不需要对document 09/19 03:29
10F:→ TonyQ:listen click跟keyDown罗 , 变成透过input去blur. 09/19 03:29
11F:→ TonyQ:不过今天没什麽时间想这件事情 如果有人有同样需求 , 再来 09/19 03:30
12F:→ TonyQ:补完吧 .我今天是写到 bind , unbind , blur, focus而已.:p 09/19 03:30