diff --git a/js/webform.js b/js/webform.js
index 9743b76..4457b96 100644
--- a/js/webform.js
+++ b/js/webform.js
@@ -323,17 +323,10 @@ Drupal.webform.stringValue = function(element, existingValue) {
   var value = [];
 
   if (element) {
-    // Simple textfields.
-    $(element).find('input:not([type=checkbox],[type=radio]),textarea').each(function() {
+    // Checkboxes and radios.
+    $(element).find('input[type=checkbox]:checked,input[type=radio]:checked').each(function() {
       value.push(this.value);
     });
-
-    // Checkboxes and radios.
-    if (!value.length) {
-      $(element).find('input:checked').each(function() {
-        value.push(this.value);
-      });
-    }
     // Select lists.
     if (!value.length) {
       var selectValue = $(element).find('select').val();
@@ -341,6 +334,13 @@ Drupal.webform.stringValue = function(element, existingValue) {
         value.push(selectValue);
       }
     }
+    // Simple text fields. This check is done last so that the select list in
+    // select-or-other fields comes before the "other" text field.
+    if (!value.length) {
+      $(element).find('input:not([type=checkbox],[type=radio]),textarea').each(function() {
+        value.push(this.value);
+      });
+    }
   }
   else if (existingValue) {
     value = existingValue;
