jQuery1.4aã§ã®live event/special event
BPStudy#28 : ATNDã®çºè¡¨è³æã
ã¹ã©ã¤ããªã©ã¯ç¨æãã¦ããããããã§çºè¡¨ããã
èªå·±ç´¹ä»
æè¡æ¹é¢ã§ã®ãã¼ã¯ã¼ã
- jQuery
- 主ã«eventå¨ãã追ã£ããã¦ãã
- Mercurial
- 俺ã 管çãããã¼ã éçºã¾ã§ãéçºãããä¸æãã¾ããããã¼ã¸ã§ã³ç®¡çã®ä»æ¹ã追æ±ä¸
- Struts2
- ä»ä»äºã§ä½¿ã£ã¦ã
- æ°ã«å ¥ã£ã
- æè¡è ç¸æã§ã¯ååã§æãã¦ãå°è±¡
Python- Be PROUD社å¡ã ã£ããDjangoã»Pyhonããã«ã½ã³ãPython温æ³ã«ããåå ãã¦ããã§èª¤è§£ãããã¡ã ãå ¨ç¶æ¸ããªã
- Perlã®æ¹ãã¾ã æ¸ãã
Be PROUD
-
- 株式会社ビープラウドã®ç¤¾å¡
- ã¤ãã£ãã§beproudããã·ã¥ã¿ã°ä»ãçºè¨ãæã ãã¦ãã
ä»æ¥ã®æ¬é¡jQuery1.4
å
æ¥jQuery1.4ã®ã¢ã«ãã¡çããªãªã¼ã¹ãããã
jQuery 1.4 Alpha 1 Released | Official jQuery Blog
- live eventã®æ¹è¯
以ä¸è©±ããªãã®ã§åæãã
- append, prepend, etc. have been heavily optimized.
- add has been adjusted to always return elements in document order.
- find, empty, remove, addClass, removeClass, hasClass, attr, and css have been heavily optimized.
ä»åã¯live eventã®æ¹è¯ã¨ããªãªã¼ã¹ãã¼ãã«ã¯è¼ã£ã¦ããªã
special eventã®æ¹è¯ã«ã¤ãã¦è©±ãã¾ãã
live event
æ¦ç¥
- ä»ããè¦ç´ ã«å¯¾ãã¦ã§ã¯ãªããCSSã»ã¬ã¯ã¿ã«å¯¾ãã¦eventãè²¼ä»ããäºãã§ãã
- 対å¿eventType: click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup
使ãæ¹
é常ã®eventè²¼ãå¥ããã®å ´å
// è²¼ä»ãã $(selecter).bind(eventType,function(ev){}); // å¥ãã $(selecter).unbind(eventType);
ããããã¨ãä»ã$(selecter)ã§é¸æãããè¦ç´ ã«å¯¾ãã¦ã
eventType(clickç)ã®event handlerã¨ãã¦ã
第2å¼æ°ã®é¢æ°ãè¨å®ãããã解é¤ãããåºæ¥ãã
live eventã®å ´åã¯bind/unbindãlive/dieã«ãªãã
// è²¼ä»ãã $(selecter).live(eventType,function(ev){}); // å¥ãã $(selecter).die(eventType);
使ãé
- åçã«è¿½å åé¤ããã³ã³ãã¼ãã³ã群ã¸eventãè¨å®
- ã·ã§ããã³ã°ã«ã¼ãã¨ã
- autopagerizeã¤ãã£ã¦ããã¼ã¸ã¨ã
ã¯ã¦ãã§ãããå®è¡ãã¦2ãã¼ã¸ç®ã追å 表示ããå¾ã
2ãã¼ã¸ç®ã®ä¸ã®ãªã³ã¯ãã¯ãªãã¯ãã¦ãalertãåºãã
jQuery('a').live('click',function(){ alert('hoge'); return false; });
- 大éã®è¦ç´ ã«eventãè¨å®
- ããã©ã¼ãã³ã¹ãæåéãæ¡éã
console.time('select'); jQuery('a'); //1305件ãããããç»é¢ã§ã®å®è¡ä¾ console.timeEnd('select'); // 5ã10ms var f = function(){}; console.time('bind'); jQuery('a').bind('click',f); console.timeEnd('bind'); // ååå®è¡æ1500msç¨åº¦ // 2åç®ä»¥éå®è¡æ200msç¨åº¦ jQuery('a').unbind('a'); console.time('live'); jQuery('a').live('click',f); console.timeEnd('live'); // 5ã10ms void 0;
- DOMContentLoadedãå¾
ããã«eventãè¨å®
- デモ
- Firebugçã®consoleãéããç¶æ ã§è©¦ãã
- click eventãlive eventã¨ãã¦aè¦ç´ ã«è¨å®
- bodyã®æå¾ã®æ¹ã§æå³ããªãèªã¿è¾¼ã¿ãéãJavaScriptãããããèªã¿è¾¼ãã§ãDOMContentLoadedãé 延ããã¦ãã
- DOMContentLoadedã«click eventãè¨å®ã§ãã¦ããã®ãããã
- デモ
live eventã®1.4ã§ã®å¼·å
ãµãã¼ããã¦ããeventTypeã®è¿½å
submit,change,mouseenter,mouseleave,focus,blur
contextã®ãµãã¼ã
ãã®ãããªæ¸ãæ¹ã§ãcontexté
ä¸ã«éå®ãã¦ã
cssSelectorã«åè´ããè¦ç´ ã«eventãè²¼ãäºãã§ããããã«ãªã£ãã
jQuery(cssSelector,context).live(eventType,function(ev){});
ãã®ã³ã¼ãã¯.mainé
ä¸ã®aã¿ã°å
¨ã¦ãclickã§alertãåºãããã«ãããã
1.3.2ã§ã¯ä½¿ããªãã
jQuery('a','.main').live('click',function(){ alert('hoge'); return false; });
ä¸ã¤ã®CSSã»ã¬ã¯ã¿ã«ãã¦ãã¾ãã°1.3.2ã§ãåãäºãåç¾åºæ¥ãã
jQuery('.main a').live('click',function(){ alert('hoge'); return false; });
ä¾ãã°CSSã»ã¬ã¯ã¿ã§ã¯ã§ããªã or ããããªããããª
ããç¨åº¦è¤éãªçµãè¾¼ã¿ãããå¾ã
ããããã®é
ä¸ã«ã¤ãã¦live eventãè²¼ããããããªå ´åã¯ã
contextã®ãµãã¼ãããªãã¨å®ç¾åºæ¥ãªãã
(function($){ $('.main ul').filter(function(i){ return !((i + 1) % 5); }).each(function(i,n){ console.info(n); $('a',n).live('click',function(ev){ alert('hoge'); return false; }) }); })(jQuery);
dataã®ãµãã¼ã
第2å¼æ°ã«objectã渡ãã¨eventãªãã¸ã§ã¯ãã®dataããããã£ããåç
§åºæ¥ãããã«ãªã£ãã
ãã¾ã²ã¨ã¤æå¹ãªä½¿ãã©ãããæãã¤ããªãã
var data = {message:'hello'}; jQuery('a').live('click',data,function(ev){ alert(ev.data.message); return false; });
special event
custom eventãå®ç¾©ããããã®ç°¡æãã¬ã¼ã ã¯ã¼ã¯ã®ãããªãã®ã
custom eventã«ã¤ãã¦ã¯ããã®è¾ºãåç
§
- JUIカンファレンスの資料
- é¢é£ï¼jQuery1.3でのtriggerメソッドについて - 文殊堂
- 結構前から収集していた海外エントリから面白いcustom eventの使い方を紹介 - 文殊堂
使ãæ¹
jQuery.event.special.eventType = { setup:function(){},teardown:function(){}};
ãã®ãããªãsetup,teardownããã¼ã«é¢æ°ãå¤ã«æã¤ãªãã¸ã§ã¯ãã渡ãã¦ããã°ããã
special eventã®æ´å²
- 1.2.2ã§å°å ¥
- 1.3 specialAllå°å ¥
- 1.4a specialAllã®specialã¸ã®ä¸æ¬å
1.2.2ã§å°å ¥ãããspecial event
l2137-l2157
mouseenter: { setup: function() { if ( jQuery.browser.msie ) return false; jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler); return true; }, teardown: function() { if ( jQuery.browser.msie ) return false; jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler); return true; }, handler: function(event) { // If we actually just moused on to a sub-element, ignore it if ( withinElement(event, this) ) return true; // Execute the right handlers by setting the event type to mouseenter arguments[0].type = "mouseenter"; return jQuery.event.handle.apply(this, arguments); } },
IE以å¤ã®ãã©ã¦ã¶ã§ã®mouseover eventã«ç¸å½ãããIEã ã¨mouseenterã§ã
ãã®ã³ã¼ãã§ã¯IE以å¤ã§ãmouseenterã使ããããã«ãã
mouseenterãã¯ãã¹ãã©ã¦ã¶å¯¾å¿ããã¦ããã
mouseout/mouseleaveã«ã¤ãã¦ãåæ§ã®äºãããäºã§ã
hoverã¡ã½ãããã·ã³ãã«ã«å®è£
åºæ¥ãããã«ãã¦ããã
l2233-l2235
hover: function(fnOver, fnOut) { return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut); },
ãã®special event1è¦ç´ Ã1eventTypeã«ã¤ã1åã®ã¿bindãããã¨ãã§ããã
1.3ã§ã®specialAllã®å°å ¥
jQuery1.3ã§ã®specialAllã®å¯ä¸ã®ä½¿ç¨ç®æãlive eventãå®ç¾©ãã¦ããç®æã§ããã
jQuery1.3.2 l2777-l2796
specialAll: { live: { setup: function( selector, namespaces ){ jQuery.event.add( this, namespaces[0], liveHandler ); }, teardown: function( namespaces ){ if ( namespaces.length ) { var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); jQuery.each( (jQuery.data(this, "events").live || {}), function(){ if ( name.test(this.type) ) remove++; }); if ( remove < 1 ) jQuery.event.remove( this, namespaces[0], liveHandler ); } } } }
使ãæ¹ã¯âã§ãspecial eventã¨ã¨ã¦ãä¼¼ã¦ããã
jQuery.event.specialAll.eventType = { setup:function(){},teardown:function(){}};
- special eventã®setup
- 1è¦ç´ Ã1eventTypeã«ã¤ã1åã®ã¿å®è¡ããã
- æ£ç¢ºã«ã¯bindããã¦ããªãç¶æ ã§ã®æåã®bindã®ã¿ã
- bindâunbindâbindãªã2åå®è¡ããã
- ãã®evenTypeã®eventãå®éã«bindãã
- 1è¦ç´ Ã1eventTypeã«ã¤ã1åã®ã¿å®è¡ããã
- specialAll
- 1è¦ç´ Ã1eventTypeã§ãä½åº¦ã§ãå®è¡ããã
- ãã®evenTypeã®eventãå®éã«bindããªã
1.4aã§ã®specialAllã®specialã¸ã®ä¸æ¬å
specialAllã®setup,teardownã®ä¸ä½äºææ©è½ã¨ãã¦ã
specialã®add,removeã使ããããã«ãªã£ãã
live eventã®å®ç¾©ãspecialã®add,removeã«ããå®ç¾ãããããã«ãªã£ãã
ã¾ããspecialAllã¯live eventã®å®ç¾©å°ç¨ã¨ããæãå¼·ãã£ããã
specialã«çµ±åãããspecialã®setup,teardownã¨ä½µç¨ã§ããããã«ãªã£ããã¨ã§ã
ã§ãããã¨ãå¢ããã
addèªä½ã®æ©è½ãspecialAllã®setupããå¼·åããã
addã®æ»ãå¤ãé¢æ°ã®æããããevent handlerã¨ãã¦å®éã«è²¼ä»ãã
ã¨ãã£ãäºãã§ããããã«ãªã£ãã
ããã«ãã£ã¦bindæã«optionã渡ãã¦ãæ¯ãèããæããã¨ãã£ããã¨ãå¯è½ã«ãªã£ãã
multiclick event
multiclick event demo
$('#example') // 3click .bind('multiclick', { threshold: 3 }, function( event ) { alert('Clicked three times!'); }) // 5click .bind('multiclick', { threshold: 5 }, function( event ) { alert('Clicked 5 times!'); });