Index: src/wp-includes/default-widgets.php
===================================================================
--- src/wp-includes/default-widgets.php	(revision 31514)
+++ src/wp-includes/default-widgets.php	(working copy)
@@ -276,17 +276,22 @@
 		$c = ! empty( $instance['count'] ) ? '1' : '0';
 		$d = ! empty( $instance['dropdown'] ) ? '1' : '0';
 
+		$dropdown_id = "{$this->id_base}-dropdown-{$this->number}";
+
 		/** This filter is documented in wp-includes/default-widgets.php */
 		$title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Archives' ) : $instance['title'], $instance, $this->id_base );
 
 		echo $args['before_widget'];
 		if ( $title ) {
+			if ( $d ) {
+				$title = sprintf( '<label for="%s">%s</label>', esc_attr( $dropdown_id ), $title );
+			}
 			echo $args['before_title'] . $title . $args['after_title'];
 		}
 
 		if ( $d ) {
 ?>
-		<select name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
+		<select id="<?php echo esc_attr( $dropdown_id ); ?>" name="archive-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
 			<?php
 			/**
 			 * Filter the arguments for the Archives widget drop-down.
@@ -563,6 +568,7 @@
 	}
 
 	public function widget( $args, $instance ) {
+		static $first_dropdown = true;
 
 		/** This filter is documented in wp-includes/default-widgets.php */
 		$title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base );
@@ -571,15 +577,28 @@
 		$h = ! empty( $instance['hierarchical'] ) ? '1' : '0';
 		$d = ! empty( $instance['dropdown'] ) ? '1' : '0';
 
+		if ( $d ) {
+			$dropdown_id = ( $first_dropdown ) ? 'cat' : "{$this->id_base}-dropdown-{$this->number}";
+			$first_dropdown = false;
+		}
+
 		echo $args['before_widget'];
 		if ( $title ) {
+			if ( $d ) {
+				$title = sprintf( '<label for="%s">%s</label>', esc_attr( $dropdown_id ), $title );
+			}
 			echo $args['before_title'] . $title . $args['after_title'];
 		}
 
-		$cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h);
+		$cat_args = array(
+			'orderby'      => 'name',
+			'show_count'   => $c,
+			'hierarchical' => $h
+		);
 
 		if ( $d ) {
-			$cat_args['show_option_none'] = __('Select Category');
+			$cat_args['show_option_none'] = __( 'Select Category' );
+			$cat_args['id'] = $dropdown_id;
 
 			/**
 			 * Filter the arguments for the Categories widget drop-down.
@@ -595,7 +614,8 @@
 
 <script type='text/javascript'>
 /* <![CDATA[ */
-	var dropdown = document.getElementById("cat");
+(function() {
+	var dropdown = document.getElementById("<?php echo esc_js( $dropdown_id ); ?>");
 	function onCatChange() {
 		if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
 			location.href = "<?php echo home_url(); ?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
@@ -602,6 +622,7 @@
 		}
 	}
 	dropdown.onchange = onCatChange;
+})(); 
 /* ]]> */
 </script>
 
