Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
dzÎöJavaScriptµÄʼþ´úÀíºÍίÍÐ
 
×÷Õߣºpuhongru_ À´Ô´£º51cto ·¢²¼ÓÚ2016-10-9
  2466  次浏览      36
 

 

ÔÚjavasriptÖÐdelegateÕâ¸ö´Ê¾­³£³öÏÖ£¬¿´×ÖÃæµÄÒâ˼£¬´úÀí¡¢Î¯ÍС£ÄÇôËü¾¿¾¹ÔÚʲôÑùµÄÇé¿öÏÂʹÓÃ?ËüµÄÔ­ÀíÓÖÊÇʲô?ÔÚ¸÷ÖÖ¿ò¼ÜÖУ¬Ò²¾­³£ÄÜ¿´µ½delegateÏà¹ØµÄ½Ó¿Ú¡£ÕâЩ½Ó¿ÚÓÖÓÐÊ²Ã´ÌØÊâµÄÓ÷¨ÄØ?ÕâÆªÎÄÕ¾ÍÖ÷Òª½éÉÜÒ»ÏÂjavascript delegateµÄÓ÷¨ºÍÔ­Àí£¬ÒÔ¼°Dojo£¬jQueryµÈ¿ò¼ÜÖÐdelegateµÄ½Ó¿Ú¡£

JavaScriptʼþ´úÀí

Ê×ÏȽéÉÜÒ»ÏÂJavaScriptµÄʼþ´úÀí¡£Ê¼þ´úÀíÔÚJSÊÀ½çÖÐÒ»¸ö·Ç³£ÓÐÓÃÒ²ºÜÓÐȤµÄ¹¦ÄÜ¡£µ±ÎÒÃÇÐèÒª¶ÔºÜ¶àÔªËØÌí¼ÓʼþµÄʱºò£¬¿ÉÒÔͨ¹ý½«Ê¼þÌí¼Óµ½ËüÃǵĸ¸½Úµã¶ø½«Ê¼þίÍиø¸¸½ÚµãÀ´´¥·¢´¦Àíº¯Êý¡£ÕâÖ÷ÒªµÃÒæÓÚä¯ÀÀÆ÷µÄʼþðÅÝ»úÖÆ£¬ºóÃæ»áÏêϸ½éÉÜ¡£ÏÂÃæÎÒÃǾßÌå¾Ù¸öÀý×ÓÀ´½âÊÍÈçºÎʹÓÃÕâ¸öÌØÐÔ¡£Õâ¸öÀý×ÓÖ÷Ҫȡ×ÔDavid WalshµÄÏà¹ØÎÄÕÂ(How JavaScript Event Delegation Works)¡£

¼ÙÉèÓÐÒ»¸ö UL µÄ¸¸½Úµã£¬°üº¬Á˺ܶà¸ö Li µÄ×ӽڵ㣺

<ul id="parent-list"> 
<li id="post-1">Item 1</li>
<li id="post-2">Item 2</li>
<li id="post-3">Item 3</li>
<li id="post-4">Item 4</li>
<li id="post-5">Item 5</li>
<li id="post-6">Item 6</li>
</ul>

µ±ÎÒÃǵÄÊó±êÒÆµ½LiÉϵÄʱºò£¬ÐèÒª»ñÈ¡´ËLiµÄÏà¹ØÐÅÏ¢²¢Æ®³öÐü¸¡´°ÒÔÏÔʾÏêϸÐÅÏ¢£¬»òÕßµ±Ä³¸öLi±»µã»÷µÄʱºòÐèÒª´¥·¢ÏàÓ¦µÄ´¦Àíʼþ¡£ÎÒÃÇͨ³£µÄд·¨£¬ÊÇΪÿ¸öLi¶¼Ìí¼ÓһЩÀàËÆonMouseOver»òÕßonClickÖ®ÀàµÄʼþ¼àÌý¡£

function addListeners4Li(liNode){ 
liNode.onclick = function clickHandler(){...};
liNode.onmouseover = function mouseOverHandler(){...}
}

window.onload = function(){
var ulNode = document.getElementById("parent-list");
var liNodes = ulNode.getElementByTagName("Li");
for(var i=0, l = liNodes.length; i < l; i++){
addListeners4Li(liNodes[i]);
}
}

Èç¹ûÕâ¸öULÖеÄLi×ÓÔªËØ»áƵ·±µØÌí¼Ó»òÕßɾ³ý£¬ÎÒÃǾÍÐèÒªÔÚÿ´ÎÌí¼ÓLiµÄʱºò¶¼µ÷ÓÃÕâ¸öaddListeners4Li·½·¨À´ÎªÃ¿¸öLi½ÚµãÌí¼Óʼþ´¦Àíº¯Êý¡£Õâ¾ÍÌí¼ÓµÄ¸´ÔӶȺͳö´íµÄ¿ÉÄÜÐÔ¡£

¸ü¼òµ¥µÄ·½·¨ÊÇʹÓÃʼþ´úÀí»úÖÆ£¬µ±Ê¼þ±»Å×µ½¸üÉϲãµÄ¸¸½ÚµãµÄʱºò£¬ÎÒÃÇͨ¹ý¼ì²éʼþµÄÄ¿±ê¶ÔÏó(target)À´Åжϲ¢»ñȡʼþÔ´Li¡£ÏÂÃæµÄ´úÂë¿ÉÒÔÍê³ÉÎÒÃÇÏëÒªµÄЧ¹û£º

// »ñÈ¡¸¸½Úµã£¬²¢ÎªËüÌí¼ÓÒ»¸öclickʼþ 
document.getElementById("parent-list").addEventListener("click",function(e) {
// ¼ì²éʼþÔ´e.targeÊÇ·ñΪLi
if(e.target && e.target.nodeName.toUpperCase == "LI") {
// ÕæÕýµÄ´¦Àí¹ý³ÌÔÚÕâÀï
console.log("List item ",e.target.id.replace("post-")," was clicked!");
}
});

Ϊ¸¸½ÚµãÌí¼ÓÒ»¸öclickʼþ£¬µ±×ӽڵ㱻µã»÷µÄʱºò£¬clickʼþ»á´Ó×ӽڵ㿪ʼÏòÉÏðÅÝ¡£¸¸½Úµã²¶»ñµ½Ê¼þÖ®ºó£¬Í¨¹ýÅжÏe.target.nodeNameÀ´ÅжÏÊÇ·ñΪÎÒÃÇÐèÒª´¦ÀíµÄ½Úµã¡£²¢ÇÒͨ¹ýe.targetÄõ½Á˱»µã»÷µÄLi½Úµã¡£´Ó¶ø¿ÉÒÔ»ñÈ¡µ½ÏàÓ¦µÄÐÅÏ¢£¬²¢×÷´¦Àí¡£

ʼþðÅݼ°²¶»ñ

֮ǰµÄ½éÉÜÖÐÒѾ­Ëµµ½ÁËä¯ÀÀÆ÷µÄʼþðÅÝ»úÖÆ¡£ÕâÀïÔÙÏêϸ½éÉÜÒ»ÏÂä¯ÀÀÆ÷´¦ÀíDOMʼþµÄ¹ý³Ì¡£¶ÔÓÚʼþµÄ²¶»ñºÍ´¦Àí£¬²»Í¬µÄä¯ÀÀÆ÷³§ÉÌÓв»Í¬µÄ´¦Àí»úÖÆ£¬ÕâÀïÎÒÃÇÖ÷Òª½éÉÜW3C¶ÔDOM2.0¶¨ÒåµÄ±ê׼ʼþ¡£

DOM2.0Ä£Ðͽ«Ê¼þ´¦ÀíÁ÷³Ì·ÖΪÈý¸ö½×¶Î£ºÒ»¡¢Ê¼þ²¶»ñ½×¶Î£¬¶þ¡¢Ê¼þÄ¿±ê½×¶Î£¬Èý¡¢Ê¼þÆðÅݽ׶Ρ£Èçͼ£º

ʼþ²¶»ñ£ºµ±Ä³¸öÔªËØ´¥·¢Ä³¸öʼþ(Èçonclick)£¬¶¥²ã¶ÔÏódocument¾Í»á·¢³öÒ»¸öʼþÁ÷£¬Ëæ×ÅDOMÊ÷µÄ½ÚµãÏòÄ¿±êÔªËØ½ÚµãÁ÷È¥£¬Ö±µ½µ½´ïʼþÕæÕý·¢ÉúµÄÄ¿±êÔªËØ¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬Ê¼þÏàÓ¦µÄ¼àÌýº¯ÊýÊDz»»á±»´¥·¢µÄ¡£

ʼþÄ¿±ê£ºµ±µ½´ïÄ¿±êÔªËØÖ®ºó£¬Ö´ÐÐÄ¿±êÔªËØ¸ÃʼþÏàÓ¦µÄ´¦Àíº¯Êý¡£Èç¹ûûÓа󶨼àÌýº¯Êý£¬ÄǾͲ»Ö´ÐС£

ʼþÆðÅÝ£º´ÓÄ¿±êÔªËØ¿ªÊ¼£¬Íù¶¥²ãÔªËØ´«²¥¡£Í¾ÖÐÈç¹ûÓнڵã°ó¶¨ÁËÏàÓ¦µÄʼþ´¦Àíº¯Êý£¬ÕâЩº¯Êý¶¼»á±»Ò»´Î´¥·¢¡£Èç¹ûÏë×èֹʼþÆðÅÝ£¬¿ÉÒÔʹÓÃe.stopPropagation()(Firefox)»òÕße.cancelBubble=true(IE)À´×é֯ʼþµÄðÅÝ´«²¥¡£

jQueryºÍDojoÖÐdelegateº¯Êý

ÏÂÃæ¿´Ò»ÏÂDojoºÍjQueryÖÐÌṩµÄʼþ´úÀí½Ó¿ÚµÄʹÓ÷½·¨¡£

$("#link-list").delegate("a", "click", function(){ 
// "$(this)" is the node that was clicked
console.log("you clicked a link!",$(this));
});

jQueryµÄdelegateµÄ·½·¨ÐèÒªÈý¸ö²ÎÊý£¬Ò»¸öÑ¡ÔñÆ÷£¬Ò»¸öʱ¼äÃû³Æ£¬ºÍʼþ´¦Àíº¯Êý¡£

¶øDojoµÄÓëjQueryÏàËÆ£¬½öÊÇÁ½Õߵıà³Ì·ç¸ñÉϵIJî±ð£º

require(["dojo/query","dojox/NodeList/delegate"], function(query,delegate){ 

query("#link-list").delegate("a","onclick",function(event) {
// "this.node" is the node that was clicked
console.log("you clicked a link!",this);
});
})

DojoµÄdelegateÄ£¿éÔÚdojox.NodeListÖУ¬ÌṩµÄ½Ó¿ÚÓëjQueryÒ»Ñù£¬²ÎÊýÒ²Ïàͬ¡£ Óŵãͨ¹ýÉÏÃæµÄ½éÉÜ£¬´ó¼ÒÓ¦¸ÃÄܹ»Ìå»áµ½Ê¹ÓÃʼþίÍжÔÓÚwebÓ¦ÓóÌÐò´øÀ´µÄ¼¸¸öÓŵ㣺

1.¹ÜÀíµÄº¯Êý±äÉÙÁË¡£²»ÐèҪΪÿ¸öÔªËØ¶¼Ìí¼Ó¼àÌýº¯Êý¡£¶ÔÓÚͬһ¸ö¸¸½ÚµãÏÂÃæÀàËÆµÄ×ÓÔªËØ£¬¿ÉÒÔͨ¹ýίÍиø¸¸ÔªËصļàÌýº¯ÊýÀ´´¦Àíʼþ¡£

2.¿ÉÒÔ·½±ãµØ¶¯Ì¬Ìí¼ÓºÍÐÞ¸ÄÔªËØ£¬²»ÐèÒªÒòÎªÔªËØµÄ¸Ä¶¯¶øÐÞ¸Äʼþ°ó¶¨¡£

3.JavaScriptºÍDOM½ÚµãÖ®¼äµÄ¹ØÁª±äÉÙÁË£¬ÕâÑùÒ²¾Í¼õÉÙÁËÒòÑ­»·ÒýÓöø´øÀ´µÄÄÚ´æÐ¹Â©·¢ÉúµÄ¸ÅÂÊ¡£

дµ½ÕâÀͻȻÏëÆðÁË֮ǰ¶ÔÓÚDojo DataGridµÄÀ§»ó£ºÄÇô¶àµÄrowsºÍcells£¬ÈçºÎ´¦ÀíËûÃÇʼþÖ®¼äµÄ¹ØÏµ¡£ÏÖÔÚÏëÏ룬ʹÓÃίÍоͺܼòµ¥ÁË¡£ËùÓеÄʼþίÍе½grid×îÍâ²ãµÄ½ÚµãÉÏ£¬µ±Ê¼þ·¢ÉúµÄʱºòͨ¹ýһЩ·½·¨À´»ñÈ¡ºÍÌí¼ÓʼþµÄ¶îÍâÊôÐÔ£¬ÈçrowIndex, cellIndex£¬Ö®ºóÔÚ·ÖÅäµ½onRowClick,onCellClickÖ®ÀàµÄ´¦Àíº¯ÊýÉÏ¡£

ÔÚJavaScript±à³ÌÖÐʹÓôúÀí

ÉÏÃæ½éÉܵÄÊǶÔDOMʼþ´¦Àíʱ£¬ÀûÓÃä¯ÀÀÆ÷ðÅÝ»úÖÆÎªDOMÔªËØÌí¼Óʼþ´úÀí¡£ÆäʵÔÚ´¿JS±à³ÌÖУ¬ÎÒÃÇÒ²¿ÉÒÔʹÓÃÕâÑùµÄ±à³Ìģʽ£¬À´´´½¨´úÀí¶ÔÏóÀ´²Ù×÷Ä¿±ê¶ÔÏó¡£ÕâÀïÒýÓÃ˾ͽÕýÃÀÏà¹ØÎÄÕÂÖеÄÒ»¸öÀý×Ó£º

var delegate = function(client, clientMethod) { 
return function() {
return clientMethod.apply(client, arguments);
}
}
var ClassA = function() {
var _color = "red";
return {
getColor: function() {
console.log("Color: " + _color);
},
setColor: function(color) {
_color = color;
}
};
};

var a = new ClassA();
a.getColor();
a.setColor("green");
a.getColor();
console.log("Ö´ÐдúÀí£¡");
var d = delegate(a, a.setColor);
d("blue");
console.log("Ö´ÐÐÍê±Ï£¡");
a.getColor();

ÉÏÃæµÄÀý×ÓÖУ¬Í¨¹ýµ÷ÓÃdelegate()º¯Êý´´½¨µÄ´úÀíº¯ÊýdÀ´²Ù×÷¶ÔaµÄÐ޸ġ£ÕâÖÖ·½Ê½¾¡¹ÜÊÇʹÓÃÁËapply(callÒ²¿ÉÒÔ)À´ÊµÏÖÁ˵÷ÓöÔÏóµÄ×ªÒÆ£¬µ«ÊÇ´Ó±à³ÌģʽÉÏʵÏÖÁ˶ÔijЩ¶ÔÏóµÄÒþ²Ø£¬¿ÉÒÔ±£»¤ÕâЩ¶ÔÏó²»±»Ëæ±ã·ÃÎʺÍÐ޸ġ£

Ôںܶà¿ò¼ÜÖж¼ÒýÓÃÁËίÍÐÕâ¸ö¸ÅÄîÓÃÀ´Ö¸¶¨·½·¨µÄÔËÐÐ×÷ÓÃÓò¡£±È½ÏµäÐ͵ÄÈçdojo.hitch(scope,method)ºÍExtJSµÄcreateDelegate(obj,args)¡£ÓÐÐËȤµÄͬѧ¿ÉÒÔ¿´Ò»ÏÂËûÃǵÄÔ´´úÂ룬Ö÷ÒªÒ²ÊÇjsº¯ÊýµÄapply·½·¨À´Öƶ¨Ö´ÐÐ×÷ÓÃÓò¡£

   
2466 ´Îä¯ÀÀ       36
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢