Index: misc/states.js
===================================================================
RCS file: /cvs/drupal/drupal/misc/states.js,v
retrieving revision 1.4
diff -u -r1.4 states.js
--- misc/states.js	30 Apr 2010 19:30:44 -0000	1.4
+++ misc/states.js	8 Sep 2010 11:19:55 -0000
@@ -9,7 +9,8 @@
  */
 var states = Drupal.states = {
   // An array of functions that should be postponed.
-  postponed: []
+  postponed: [],
+  reenable: []
 };
 
 /**
@@ -350,12 +351,12 @@
   $(document).bind('state:disabled', function(e) {
     // Only act when this change was triggered by a dependency and not by the
     // element monitoring itself.
-    if (e.trigger) {
+    if ((e.trigger) && (e.target.disabled != e.value)) {
       $(e.target)
         .attr('disabled', e.value)
         .filter('.form-element')
           .closest('.form-item, .form-wrapper')[e.value ? 'addClass' : 'removeClass']('form-disabled');
-
+      states.reenable.push(e.target);
       // Note: WebKit nightlies don't reflect that change correctly.
       // See https://bugs.webkit.org/show_bug.cgi?id=23789
     }
@@ -386,6 +387,12 @@
       }
     }
   });
+
+  $(document).submit(function() {
+    for (i in states.reenable) {
+      $(states.reenable[i]).attr('disabled', false);
+    }
+  });
 }
 
 /**
