Drupal 5 comes with jQuery 1.0.4. I use jquery_update module / method to bump jQuery to 1.1.2 on my site. The issue likely exists with other jQuery versions.
Basic scenario:
A store is setup with 2 payment method options (paypal and webmoney in my case). The checkout panes are ordered such that choice of payment method precedes shipping calculation pane (is this the default?). If the second payment method is selected, clicking "Calculate Shipping" resets the choice of payment method to the default.
The order of panes does not affect reproducibility of the bug. For obvious reasons, if the customer is prompted to calculate shipping first (through ordering of panes), or if there is a single payment method available, the bug doesn't show. Placing shipping pane first cleverly hides the bug, which is the solution I went with for now. The issue however may come up in some alternative scenarios.



Re: "Calculate Shipping" resets payment option choice on checkou
I'm not able to reproduce this bug. I was using the check and credit card payment methods, but the order of the panes didn't affect the choices made in the different panes. Maybe there's something about webmoney integration that isn't right. I haven't looked at the code or anything.
I narrowed the issue down...
I use jquery_update module (http://drupal.org/project/jquery_update) on my site. Downgrading jQuery, i.e. replacing /misc/jquery.js with Drupal's original makes the problem go away.
According to the jQuery changelog the change that occurred between 1.0.4 and 1.1 relevant here I think is this:
jQuery is no longer destructive. Doing var a = $("a"); a.find("span"); does not change the original "a" variable.
(http://dev.jquery.com/browser/trunk/jquery/ChangeLog.txt#L69)
In $Id: uc_quote.js,v 1.4.2.10 2008/09/17 21:38:39 rszrama Exp $
In function displayQuote(), on line 192, "quoteDiv.end()" returns the whole document, and subsequent operation acts on the wrong set of elements.
...if (quoteDiv.find("input").length == 0) {
quoteDiv.end().append(Drupal.settings.uc_quote.err_msg);
}
else {
quoteDiv.end().find("input:radio").eq(0).change().attr("checked", "checked").end().end();
var quoteForm = quoteDiv.html();
quoteDiv.append("<input type=\"hidden\" name=\"quote-form\" value=\"" + encodeURIComponent(quoteForm) + "\" />");
}
...
I guess this feeds into the larger issue of porting Ubercart to Drupal 6 which uses newer jQuery out of the box.I just noticed that it's been fixed in the Drupal 6 branch to work against the newer jQuery, http://cvs.drupal.org/viewvc.py/drupal/contributions/modules/ubercart/sh...
I guess there is no hope for jquery_update and Ubercart on D5 :-/