»ùÓÚʼþµÄJavaScript±à³Ì£ºÒì²½Óëͬ²½

µ¼Óï JavaScript×î»ù´¡µÄÒì²½º¯ÊýÊÇsetTimeoutºÍsetInterval¡£setTimeout»áÔÚÒ»¶¨Ê±¼äºóÖ´Ðиø¶¨µÄº¯Êý¡£Ëü½ÓÊÜÒ»¸ö»Øµ÷º¯Êý×÷ΪµÚÒ»²ÎÊýºÍÒ»¸öºÁÃëʱ¼ä×÷ΪµÚ¶þ²ÎÊý¡£

 

JavaScriptµÄÓÅÊÆÖ®Ò»ÊÇÆäÈçºÎ´¦ÀíÒì²½´úÂë¡£Òì²½´úÂë»á±»·ÅÈëÒ»¸öʼþ¶ÓÁУ¬µÈµ½ËùÓÐÆäËû´úÂëÖ´Ðкó²Å½øÐУ¬¶ø²»»á×èÈûÏ̡߳£È»¶ø£¬¶ÔÓÚ³õѧÕßÀ´Ëµ£¬ÊéдÒì²½´úÂë¿ÉÄÜ»á±È½ÏÀ§ÄÑ¡£¶øÔÚÕâƪÎÄÕÂÀÎÒ½«»áÏû³ýÄã¿ÉÄÜ»áÓеÄÈκÎÀ§»ó¡£

Àí½âÒì²½´úÂë

JavaScript×î»ù´¡µÄÒì²½º¯ÊýÊÇsetTimeoutºÍsetInterval¡£setTimeout»áÔÚÒ»¶¨Ê±¼äºóÖ´Ðиø¶¨µÄº¯Êý¡£Ëü½ÓÊÜÒ»¸ö»Øµ÷º¯Êý×÷ΪµÚÒ»²ÎÊýºÍÒ»¸öºÁÃëʱ¼ä×÷ΪµÚ¶þ²ÎÊý¡£ÒÔÏÂÊÇÓ÷¨¾ÙÀý£º


  1. console.log( "a" );  
  2. setTimeout(function() {  
  3.     console.log( "c" )  
  4. }, 500 );  
  5. setTimeout(function() {  
  6.     console.log( "d" )  
  7. }, 500 );  
  8. setTimeout(function() {  
  9.     console.log( "e" )  
  10. }, 500 );  
  11. console.log( "b" ); 

ÕýÈçÔ¤ÆÚ£¬¿ØÖÆ̨ÏÈÊä³ö“a”¡¢“b”£¬´óÔ¼500ºÁÃëºó£¬ÔÙ¿´µ½“c”¡¢“d”¡¢“e”¡£ÎÒÓÓ´óÔ¼”ÊÇÒòΪsetTimeoutÊÂʵÉÏÊDz»¿ÉÔ¤ÖªµÄ¡£Êµ¼ÊÉÏ£¬ÉõÖÁ HTML5¹æ·¶¶¼Ìáµ½ÁËÕâ¸öÎÊÌ⣺

 

“Õâ¸öAPI²»Äܱ£Ö¤¼Æʱ»áÈçÆÚ׼ȷµØÔËÐС£ÓÉÓÚCPU¸ºÔØ¡¢ÆäËûÈÎÎñµÈËùµ¼ÖµÄÑÓ³ÙÊÇ¿ÉÒÔÔ¤Áϵ½µÄ¡£”

 

ÓÐȤµÄÊÇ£¬Ö±µ½ÔÚͬһ³ÌÐò¶ÎÖÐËùÓÐÆäÓàµÄ´úÂëÖ´ÐнáÊøºó£¬³¬Ê±²Å»á·¢Éú¡£ËùÒÔÈç¹ûÉèÖÃÁ˳¬Ê±£¬Í¬Ê±Ö´ÐÐÁËÐ賤ʱ¼äÔËÐеĺ¯Êý£¬ÄÇôÔڸú¯ÊýÖ´ÐÐÍê³É֮ǰ£¬³¬Ê±ÉõÖÁ¶¼²»»áÆô¶¯¡£Êµ¼ÊÉÏ£¬Òì²½º¯Êý£¬ÈçsetTimeoutºÍsetInterval£¬±»Ñ¹ÈëÁ˳Æ֮ΪEvent LoopµÄ¶ÓÁС£

Event LoopÊÇÒ»¸ö»Øµ÷º¯Êý¶ÓÁС£µ±Òì²½º¯ÊýÖ´ÐÐʱ£¬»Øµ÷º¯Êý»á±»Ñ¹ÈëÕâ¸ö¶ÓÁС£JavaScriptÒýÇæÖ±µ½Òì²½º¯ÊýÖ´ÐÐÍê³Éºó£¬²Å»á¿ªÊ¼´¦ÀíʼþÑ­»·¡£ÕâÒâζ×ÅJavaScript´úÂë²»ÊǶàÏ̵߳ģ¬¼´Ê¹±íÏÖµÄÐÐΪÏàËÆ¡£Ê¼þÑ­»·ÊÇÒ»¸öÏȽøÏȳö£¨FIFO£©¶ÓÁУ¬Õâ˵Ã÷»Øµ÷ÊÇ°´ÕÕËüÃDZ»¼ÓÈë¶ÓÁеÄ˳ÐòÖ´Ðеġ£JavaScript±» nodeÑ¡×öΪ¿ª·¢ÓïÑÔ£¬¾ÍÊÇÒòΪдÕâÑùµÄ´úÂë¶àô¼òµ¥°¡¡£

Ajax

Òì²½JavascriptÓëXML£¨AJAX£©ÓÀ¾ÃÐԵĸıäÁËJavascriptÓïÑÔµÄ×´¿ö¡£Í»È»¼ä£¬ä¯ÀÀÆ÷²»ÔÙÐèÒªÖØмÓÔؼ´¿É¸üÐÂwebÒ³Ãæ¡£ ÔÚ²»Í¬µÄä¯ÀÀÆ÷ÖÐʵÏÖAjaxµÄ´úÂë¿ÉÄÜÂþ³¤²¢ÇÒ·¦Î¶£»µ«ÊÇ£¬ÐÒ¿÷ÓÐjQuery£¨»¹ÓÐÆäËû¿â£©µÄ°ïÖú£¬ÎÒÃÇÄܹ»ÒÔºÜÈÝÒײ¢ÇÒÓÅÑŵķ½Ê½ÊµÏÖ¿Í»§¶Ë-·þÎñÆ÷¶ËͨѶ¡£

ÎÒÃÇ¿ÉÒÔʹÓÃjQuery¿çä¯ÀÀÆ÷½Ó¿Ú$.ajaxºÜÈÝÒ׵ؼìË÷Êý¾Ý£¬È»¶øÈ´²»ÄܳÊÏÖÄ»ºó·¢ÉúÁËʲô¡£±ÈÈ磺


  1. var data;  
  2. $.ajax({  
  3.     url: "some/url/1",  
  4.     success: function( data ) {  
  5.         // But, this will!  
  6.         console.log( data );  
  7.     }  
  8. })  
  9. // Oops, this won't work...  
  10. console.log( data ); 

½ÏÈÝÒ×·¸µÄ´íÎó£¬ÊÇÔÚµ÷ÓÃ$.ajaxÖ®ºóÂíÉÏʹÓÃdata£¬µ«ÊÇʵ¼ÊÉÏÊÇÕâÑùµÄ£º


  1. xmlhttp.open( "GET""some/ur/1"true );  
  2. xmlhttp.onreadystatechange = function( data ) {  
  3.     if ( xmlhttp.readyState === 4 ) {  
  4.         console.log( data );  
  5.     }  
  6. };  
  7. xmlhttp.send( null ); 

µ×²ãµÄXmlHttpRequest¶ÔÏó·¢ÆðÇëÇó£¬ÉèÖûص÷º¯ÊýÓÃÀ´´¦ÀíXHRµÄreadystatechnageʼþ¡£È»ºóÖ´ÐÐXHRµÄsend·½·¨¡£ÔÚXHRÔËÐÐÖУ¬µ±ÆäÊôÐÔreadyState¸Ä±äʱreadystatechangeʼþ¾Í»á±»´¥·¢£¬Ö»ÓÐÔÚXHR´ÓÔ¶¶Ë·þÎñÆ÷½ÓÊÕÏìÓ¦½áÊøʱ»Øµ÷º¯Êý²Å»á´¥·¢Ö´ÐС£

´¦ÀíÒì²½´úÂë

Òì²½±à³ÌºÜÈÝÒ×ÏÝÈëÎÒÃdz£ËµµÄ“»Øµ÷µØÓü”¡£ÒòΪÊÂʵÉϼ¸ºõJSÖеÄËùÓÐÒì²½º¯Êý¶¼Óõ½Á˻ص÷£¬Á¬ÐøÖ´Ðм¸¸öÒì²½º¯ÊýµÄ½á¹û¾ÍÊDzã²ãǶÌ׵Ļص÷º¯ÊýÒÔ¼°ËæÖ®¶øÀ´µÄ¸´ÔÓ´úÂë¡£

node.jsÖеÄÐí¶àº¯ÊýÒ²ÊÇÒì²½µÄ¡£Òò´ËÈçϵĴúÂë»ù±¾ÉϺܳ£¼û£º


  1. var fs = require( "fs" );  
  2. fs.exists( "index.js"function() {  
  3.     fs.readFile( "index.js""utf8"function( err, contents ) {  
  4.         contents = someFunction( contents ); // do something with contents  
  5.         fs.writeFile( "index.js""utf8"function() {  
  6.             console.log( "whew! Done finally..." );  
  7.         });  
  8.     });  
  9. });  
  10. console.log( "executing..." ); 

ÏÂÃæµÄ¿Í»§¶Ë´úÂëÒ²ºÜ¶à¼û£º


  1. GMaps.geocode({  
  2.     address: fromAddress,  
  3.     callback: function( results, status ) {  
  4.         if ( status == "OK" ) {  
  5.             fromLatLng = results[0].geometry.location;  
  6.             GMaps.geocode({  
  7.                 address: toAddress,  
  8.                 callback: function( results, status ) {  
  9.                     if ( status == "OK" ) {  
  10.                         toLatLng = results[0].geometry.location;  
  11.                         map.getRoutes({  
  12.                             origin: [ fromLatLng.lat(), fromLatLng.lng() ],  
  13.                             destination: [ toLatLng.lat(), toLatLng.lng() ],  
  14.                             travelMode: "driving",  
  15.                             unitSystem: "imperial",  
  16.                             callback: function( e ){  
  17.                                 console.log( "ANNNND FINALLY here's the directions..." );  
  18.                                 // do something with e  
  19.                             }  
  20.                         });  
  21.                     }  
  22.                 }  
  23.             });  
  24.         }  
  25.     }  
  26. }); 

Nested callbacks can get really nasty, but there are several solutions to this style of coding.

ǶÌ׵Ļص÷ºÜÈÝÒ×´øÀ´´úÂëÖеē»µÎ¶µÀ”£¬²»¹ýÄã¿ÉÒÔÓÃÒÔϵļ¸ÖÖ·ç¸ñÀ´³¢ÊÔ½â¾öÕâ¸öÎÊÌâ

 

The problem isn’t with the language itself; it’s with the way programmers use the language — Async Javascript.

ûÓÐÔã¸âµÄÓïÑÔ£¬Ö»ÓÐÔã¸âµÄ³ÌÐòÔ³ ——Òì²½JavaSript

 

ÃüÃûº¯Êý

Çå³ýǶÌ׻ص÷µÄÒ»¸ö±ã½ÝµÄ½â¾ö·½°¸ÊǼòµ¥µÄ±ÜÃâË«²ãÒÔÉϵÄǶÌס£´«µÝÒ»¸öÃüÃûº¯Êý¸ø×÷Ϊ»Øµ÷²ÎÊý£¬¶ø²»ÊÇ´«µÝÄäÃûº¯Êý£º


  1. var fromLatLng, toLatLng;  
  2. var routeDone = function( e ){  
  3.     console.log( "ANNNND FINALLY here's the directions..." );  
  4.     // do something with e  
  5. };  
  6. var toAddressDone = function( results, status ) {  
  7.     if ( status == "OK" ) {  
  8.         toLatLng = results[0].geometry.location;  
  9.         map.getRoutes({  
  10.             origin: [ fromLatLng.lat(), fromLatLng.lng() ],  
  11.             destination: [ toLatLng.lat(), toLatLng.lng() ],  
  12.             travelMode: "driving",  
  13.             unitSystem: "imperial",  
  14.             callback: routeDone  
  15.         });  
  16.     }  
  17. };  
  18. var fromAddressDone = function( results, status ) {  
  19.     if ( status == "OK" ) {  
  20.         fromLatLng = results[0].geometry.location;  
  21.         GMaps.geocode({  
  22.             address: toAddress,  
  23.             callback: toAddressDone  
  24.         });  
  25.     }  
  26. };  
  27. GMaps.geocode({  
  28.     address: fromAddress,  
  29.     callback: fromAddressDone  
  30. }); 

´ËÍâ, async.js ¿â¿ÉÒÔ°ïÖúÎÒÃÇ´¦Àí¶àÖØAjax requests/responses. ÀýÈ磺


  1. async.parallel([  
  2.     function( done ) {  
  3.         GMaps.geocode({  
  4.             address: toAddress,  
  5.             callback: function( result ) {  
  6.                 done( null, result );  
  7.             }  
  8.         });  
  9.     },  
  10.     function( done ) {  
  11.         GMaps.geocode({  
  12.             address: fromAddress,  
  13.             callback: function( result ) {  
  14.                 done( null, result );  
  15.             }  
  16.         });  
  17.     }  
  18. ], function( errors, results ) {  
  19.     getRoute( results[0], results[1] );  
  20. }); 

Õâ¶Î´úÂëÖ´ÐÐÁ½¸öÒì²½º¯Êý£¬Ã¿¸öº¯Êý¶¼½ÓÊÕÒ»¸öÃûΪ"done"µÄ»Øµ÷º¯Êý²¢ÔÚº¯Êý½áÊøµÄʱºòµ÷ÓÃËü¡£µ±Á½¸ö"done"»Øµ÷º¯Êý½áÊøºó£¬parallelº¯ÊýµÄ»Øµ÷º¯Êý±»µ÷Óò¢Ö´Ðлò´¦ÀíÕâÁ½¸öÒì²½º¯Êý²úÉúµÄ½á¹û»ò´íÎó¡£

PromisesÄ£ÐÍ

Òý×Ô CommonJS/A£º

 

promise±íʾһ¸ö²Ù×÷¶ÀÁ¢Íê³Éºó·µ»ØµÄ×îÖÕ½á¹û¡£

 

Óкܶà¿â¶¼°üº¬ÁËpromiseÄ£ÐÍ£¬ÆäÖÐjQueryÒѾ­ÓÐÁËÒ»¸ö¿ÉʹÓÃÇҺܳöÉ«µÄpromise API¡£jQueryÔÚ1.5°æ±¾ÒýÈëÁËDeferred¶ÔÏ󣬲¢¿ÉÒÔÔÚ·µ»ØpromiseµÄº¯ÊýÖÐʹÓÃjQuery.DeferredµÄ¹¹Ôì½á¹û¡£¶ø·µ»ØpromiseµÄº¯ÊýÔòÓÃÓÚÖ´ÐÐijÖÖÒì²½²Ù×÷²¢½â¾öÍê³ÉºóµÄÑÓ³Ù¡£


  1. var geocode = function( address ) {  
  2.     var dfd = new $.Deferred();  
  3.     GMaps.geocode({  
  4.         address: address,  
  5.         callback: function( response, status ) {  
  6.             return dfd.resolve( response );  
  7.         }  
  8.     });  
  9.     return dfd.promise();  
  10. };  
  11. var getRoute = function( fromLatLng, toLatLng ) {  
  12.     var dfd = new $.Deferred();  
  13.     map.getRoutes({  
  14.         origin: [ fromLatLng.lat(), fromLatLng.lng() ],  
  15.         destination: [ toLatLng.lat(), toLatLng.lng() ],  
  16.         travelMode: "driving",  
  17.         unitSystem: "imperial",  
  18.         callback: function( e ) {  
  19.             return dfd.resolve( e );  
  20.         }  
  21.     });  
  22.     return dfd.promise();  
  23. };  
  24. var doSomethingCoolWithDirections = function( route ) {  
  25.     // do something with route  
  26. };  
  27. $.when( geocode( fromAddress ), geocode( toAddress ) ).  
  28.     then(function( fromLatLng, toLatLng ) {  
  29.         getRoute( fromLatLng, toLatLng ).then( doSomethingCoolWithDirections );  
  30.     }); 

ÕâÔÊÐíÄãÖ´ÐÐÁ½¸öÒì²½º¯Êýºó£¬µÈ´ýËüÃǵĽá¹û£¬Ö®ºóÔÙÓÃÏÈÇ°Á½¸öµ÷ÓõĽá¹ûÀ´Ö´ÐÐÁíÍâÒ»¸öº¯Êý¡£

 

promise±íʾһ¸ö²Ù×÷¶ÀÁ¢Íê³Éºó·µ»ØµÄ×îÖÕ½á¹û¡£

 

ÔÚÕâ¶Î´úÂëÀgeocode·½·¨Ö´ÐÐÁËÁ½´Î²¢·µ»ØÁËÒ»¸öpromise¡£Òì²½º¯ÊýÖ®ºóÖ´ÐУ¬²¢ÔÚÆä»Øµ÷Àïµ÷ÓÃÁËresolve¡£È»ºó£¬Ò»µ©Á½´Îµ÷ÓÃresolveÍê³É£¬then½«»áÖ´ÐУ¬Æä½ÓÊÕÁË֮ǰÁ½´Îµ÷ÓÃgeocodeµÄ·µ»Ø½á¹û¡£½á¹ûÖ®ºó±»´«ÈëgetRoute£¬´Ë·½·¨Ò²·µ»ØÒ»¸öpromise¡£×îÖÕ£¬µ±getRouteµÄpromise½â¾öºó£¬doSomethingCoolWithDirections»Øµ÷¾ÍÖ´ÐÐÁË¡£

ʼþ

ʼþÊÇÁíÒ»ÖÖµ±Òì²½»Øµ÷Íê³É´¦ÀíºóµÄͨѶ·½Ê½¡£Ò»¸ö¶ÔÏó¿ÉÒÔ³ÉΪ·¢ÉäÆ÷²¢ÅÉ·¢Ê¼þ£¬¶øÁíÍâµÄ¶ÔÏóÔò¼àÌýÕâЩʼþ¡£ÕâÖÖÀàÐ͵Äʼþ´¦Àí·½Ê½³Æ֮Ϊ ¹Û²ìÕßģʽ ¡£ backbone.js ¿âÔÚwithBackbone.EventsÖоʹ´½¨ÁËÕâÑùµÄ¹¦ÄÜÄ£¿é¡£


  1. var SomeModel = Backbone.Model.extend({  
  2.    url: "/someurl" 
  3. });  
  4. var SomeView = Backbone.View.extend({  
  5.     initialize: function() {  
  6.         this.model.on( "reset"this.render, this );  
  7.         this.model.fetch();  
  8.     },  
  9.     render: function( data ) {  
  10.         // do something with data  
  11.     }  
  12. });  
  13. var view = new SomeView({  
  14.     model: new SomeModel()  
  15. }); 

»¹ÓÐÆäËûÓÃÓÚ·¢ÉäʼþµÄ»ìºÏÀý×Ӻͺ¯Êý¿â£¬ÀýÈç jQuery Event Emitter £¬ EventEmitter £¬ monologue.js £¬ÒÔ¼°node.jsÄÚ½¨µÄ EventEmitter Ä£¿é¡£

 

ʼþÑ­»·ÊÇÒ»¸ö»Øµ÷º¯ÊýµÄ¶ÓÁС£

 

Ò»¸öÀàËƵÄÅÉ·¢ÏûÏ¢µÄ·½Ê½³ÆΪ ÖнéÕßģʽ £¬ postal.js ¿âÖÐÓõļ´ÊÇÕâÖÖ·½Ê½¡£ÔÚÖнéÕßģʽ£¬ÓÐÒ»¸öÓÃÓÚËùÓжÔÏó¼àÌýºÍÅÉ·¢Ê¼þµÄÖмäÈË¡£ÔÚÕâÖÖģʽÏ£¬Ò»¸ö¶ÔÏó²»ÓëÁíÍâµÄ¶ÔÏó²úÉúÖ±½ÓÁªÏµ£¬´Ó¶øʹµÃ¶ÔÏó¼ä¶¼»¥Ïà·ÖÀë¡£

¾ø²»Òª·µ»Øpromiseµ½Ò»¸ö¹«ÓõÄAPI¡£Õâ²»½ö¹Øϵµ½ÁËAPIÓû§¶ÔpromisesµÄʹÓã¬Ò²Ê¹µÃÖع¹¸ü¼ÓÀ§ÄÑ¡£²»¹ý£¬ÄÚ²¿ÓÃ;µÄpromisesºÍÍⲿ½Ó¿ÚµÄʼþµÄ½áºÏ£¬È´¿ÉÒÔÈÃÓ¦ÓøüµÍñîºÏÇÒ±ãÓÚ²âÊÔ¡£

ÔÚÏÈÇ°µÄÀý×ÓÀïÃ棬doSomethingCoolWithDirections»Øµ÷º¯ÊýÔÚÁ½¸ögeocodeº¯ÊýÍê³ÉºóÖ´ÐС£È»ºó£¬doSomethingCoolWithDirections²Å»á»ñµÃ´ÓgetRoute½ÓÊÕµ½µÄÏìÓ¦£¬ÔÙ½«Æä×÷ΪÏûÏ¢·¢ËͳöÈ¥¡£


  1. var doSomethingCoolWithDirections = function( route ) {  
  2.     postal.channel( "ui" ).publish( "directions.done",  {  
  3.         route: route  
  4.     });  
  5. }; 

ÕâÔÊÐíÁËÓ¦ÓõÄÆäËû²¿·Ö²»ÐèÒªÖ±½ÓÒýÓòúÉúÇëÇóµÄ¶ÔÏ󣬾ͿÉÒÔÏìÓ¦Òì²½»Øµ÷¡£¶øÔÚÈ¡µÃÃüÁîʱ£¬ºÜ¿ÉÄÜÒ³ÃæµÄºÃ¶àÇøÓò¶¼ÐèÒª¸üС£ÔÚÒ»¸öµäÐ͵ÄjQuery Ajax¹ý³ÌÖУ¬µ±½ÓÊÕµ½µÄÃüÁî±ä»¯Ê±£¬ÒªË³ÀûµÄ»Øµ÷¿ÉÄܾ͵Ã×öÏàÓ¦µÄµ÷ÕûÁË¡£Õâ¿ÉÄÜ»áʹµÃ´úÂëÄÑÒÔά»¤£¬µ«Í¨¹ýʹÓÃÏûÏ¢£¬´¦ÀíUI¶à¸öÇøÓòµÄ¸üоͻá¼òµ¥µÃ¶àÁË¡£


  1. var UI = function() {  
  2.     this.channel = postal.channel( "ui" );  
  3.     this.channel.subscribe( "directions.done"this.updateDirections ).withContext( this );  
  4. };  
  5. UI.prototype.updateDirections = function( data ) {  
  6.     // The route is available on data.route, now just update the UI  
  7. };  
  8. app.ui = new UI(); 

ÁíÍâһЩ»ùÓÚÖнéÕßģʽ´«ËÍÏûÏ¢µÄ¿âÓÐ amplify, PubSubJS, and radio.js¡£ 

½áÂÛ

JavaScript ʹµÃ±àдÒì²½´úÂëºÜÈÝÒ×. ʹÓà promises, ʼþ, »òÕßÃüÃûº¯ÊýÀ´±ÜÃâ“callback hell”. Ϊ»ñÈ¡¸ü¶àjavascriptÒì²½±à³ÌÐÅÏ¢,Çëµã»÷Async JavaScript: Build More Responsive Apps with Less . ¸ü¶àµÄʵÀýÍйÜÔÚgithubÉÏ£¬µØÖ·NetTutsAsyncJS£¬¸Ï¿ìClone°É !

Ô­ÎÄÁ´½Ó£ºhttp://www.oschina.net/translate/event-based-programming-what-async-has-over-sync

 

http://www.aseoe.com/ true »ùÓÚʼþµÄJavaScript±à³Ì£ºÒì²½Óëͬ²½ http://www.aseoe.com/show-12-49-1.html report <£¿php echo strlen($content) / 2; ?> JavaScript×î»ù´¡µÄÒì²½º¯ÊýÊÇsetTimeoutºÍsetInterval¡£setTimeout»áÔÚÒ»¶¨Ê±¼äºóÖ´Ðиø¶¨µÄº¯Êý¡£Ëü½ÓÊÜÒ»¸ö»Øµ÷º¯Êý×÷ΪµÚÒ»²ÎÊýºÍÒ»¸öºÁÃëʱ¼ä×÷ΪµÚ¶þ²ÎÊý¡£
±¾Õ¾»¶Ó­ÈκÎÐÎʽµÄתÔØ£¬µ«ÇëÎñ±Ø×¢Ã÷³ö´¦£¬×ðÖØËûÈËÀͶ¯³É¹û
תÔØÇë×¢Ã÷£º ÎÄÕÂתÔØ×Ô£º°®Ë¼×ÊÔ´Íø http://www.aseoe.com/show-12-49-1.html

[Ç°¶Ë²å¼þÍƼö] Plugin

1 2 3 4
  • jQueryʵÏÖÖð×ÖÖð¾äÏÔʾ²å¼þl-by-l.min.js
  • jQuery´ø·½Ïò¸ÐÖªµÄÊó±ê»¬¹ýͼƬ±ß¿òÌØЧ²å¼þ
  • jQuery HotKeys¼àÌý¼üÅÌ°´ÏÂʼþkeydown²å¼þ
  • ÏìӦʽÎÞÏÞÂÖ²¥jQueryÐýתľÂí²å¼þ
ÏìӦʽÎÞÏÞÂÖ²¥jQueryÐýתľÂí²å¼þ
webÇ°¶Ë¿ª·¢
°®Ë¼×ÊÔ´Íø Copyright 2012-2014 Www.Aseoe.Com All rights reserved.(½úICP±¸13001436ºÅ-1)