Hi,

First off, the caveat, I'm a noob. However, I have a small piece of
code that is causing some odd behaviour in FF 2 and 3 but not in other
browsers (IE6 & 7, Safari 3 are the ones I've tested).

The code inspects a text input and on each keyup issues an ajax
request. The target PHP file checks whether the input matches a string
and if so the jQuery code then disables the text input field, scans
the page for PayPal add to basket buttons (normally 7 off them) and
adjusts each form hidden field amount and button text by 2 pounds (the
forms are not encrypted).

This all seems to work very well on every browser I've got immediate
access to but not FF 3 (Mac) or FF 2 (Win). On these browsers the
changes to the hidden fields persist across page reloads so if I input
the correct code then refresh the page and input the correct code
again then the form fields and buttons will be adjusted by 4 pounds
and not just two. This behaviour will continue as many times as I can
be bothered to refresh and reenter the correct code. What's
particularly odd is the button values are reset to the originals after
each page refresh, just not the hidden fields amounts.

I've no doubt that this is down to me a) not understanding how the DOM
really works and b) not really understanding how jQuery works and c)
writing crappy code. However, I'd really appreciate some guidance and
explanation. My code is pasted below.

Cheers

Greg

$(document).ready(function(){
                // reset the discount input
                $('#discountCode').attr('disabled', '').val('');

                $('#discountCode').keyup(function() {
                        var inputValue = $('#discountCode').val();

                        $.get('/assets/data/discount.php', {code: inputValue},
function(data) {
                                if (data == 'true')
                                {
                                        // if code is correct we disable the 
input
                                        $('#discountCode').attr('disabled', 
'disabled');

                                        // and show the tick mark
                                        $('#correctCode').css('display', 
'inline');

                                        // get each hidden input amount
                                        $("#main form 
input[name='amount']").each(function() {
                                                var originalCost = 
$(this).val();
                                                // apply the discount
                                                var discountCost = originalCost 
- 2;
                                                // set the discount in the 
hidden amount fields
                                                $(this).val(discountCost);
                                                // Change the button text
                                                var newButtonText = 
'£'+discountCost+' Add to basket';
                                                
$(this).parent().next('.paypal_button').val(newButtonText);
                                                // reset variables
                                                originalCost = 0;
                                                discountCost = 0;
                                        });
                                };
                        });
                });
         });

Reply via email to