Index: src/wp-includes/js/media-grid.js
===================================================================
--- src/wp-includes/js/media-grid.js	(revision 28999)
+++ src/wp-includes/js/media-grid.js	(working copy)
@@ -340,7 +340,8 @@
 			'click':                    'collapse',
 			'click .delete-media-item': 'deleteMediaItem',
 			'click .left':              'previousMediaItem',
-			'click .right':             'nextMediaItem'
+			'click .right':             'nextMediaItem',
+			'keydown':                 'keyEvent'
 		},
 
 		initialize: function() {
@@ -377,6 +378,9 @@
 
 				this.modal.content( this );
 				this.modal.open();
+				// Ensure modal gains focus, otherwise keyboard events lost
+				$( '.attachment-fields input:first' ).focus();
+
 			}
 		},
 
@@ -482,8 +486,24 @@
 				return;
 			this.modal.close();
 			this.options.gridController.trigger( 'edit:attachment:next', this.model );
-		}
+		},
+		/**
+		 * Respond to the keyboard events: right arrow, left arrow.
+		 */
+		keyEvent: function( event ) {
+			// The right arrow key
+			if ( event.keyCode === 39 ) {
+				if ( ! this.options.hasNext ) { return; }
+				_.once( this.nextMediaItem() );
+			}
 
+			// The left arrow key
+			if ( event.keyCode === 37 ) {
+				if ( ! this.options.hasPrevious ) { return; }
+				_.once( this.previousMediaItem() );
+			}
+		},
+
 	});
 
 	media.view.GridFieldOptions = media.View.extend({
