jQuery autocomplete fills all fields

Hi people,

I have a problem where ig you click on the reslit that comes up with the Autocomplete it fills in ALL the fields related to that part of the data. Im clueless to how to stop it happening and to only fill in the one row. Demo is here: http://www.clockworkhire.co.uk/jstest.html Words to use: SM58, Mackie SRM 450, Martin Mac 250, Clay Paky Sharpie.

Code:

JS:

[code]$(document).ready(function() {

 $(".quantity").keydown(function(event) {
    // Allow: backspace, delete, tab, escape, and enter
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || 
         // Allow: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) || 
         // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }
    else {
        // Ensure that it is a number and stop the keypress
        if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }
});

$counter = 1;
$('#buttonadd').click(function() {
    $counter++;
    $('#invoiceitems > tbody:last').append('<tr><td><input type="button" class="deleteitem" value="Delete"/></td><td><input type="text" name="item[' + $counter + '][code]" id="id' + $counter + '-1" class="code" value="" disabled="disabled"/></td><td><input type="text" name="item[' + $counter + '][desc]" id="id' + $counter + '" class="regular-text" value="" /></td><td>£<input type="text" name="item[' + $counter + '][price]" id="id' + $counter + '-3"class="price" value="0.00" disabled="disabled"/></td><td><input type="text" name="item[' + $counter + '][quantity]" id="id' + $counter + '-4" class="quantity" value="0" /></td><td>£<label class="subtotal">0.00</label></td></tr>');
 $('.quantity , .price , .code').unbind().on('change', function() {
    UpdateTotals(this);
});

// Use the .autocomplete() method to compile the list based on input from user

$(".regular-text").autocomplete(“client/inc/get_item_list.php”, {
width: 260,
matchContains: true,
mustMatch: true,
minChars: 2,
//multiple: true,
//highlight: false,
//multipleSeparator: “,”,
selectFirst: true
});

$('.regular-text').focus(function() {
$('.regular-text').removeClass('onFocus'); /* remove focus state from all input elements */
$(this).addClass('onFocus'); /* add focus state to currently clicked element */
var currentId = $(this).attr('id');
});

$(".regular-text").result(function(event, data, formatted) {
	$(".code").val(data[1]);
	$(".price").val(data[2]);
		// Give focus to the next input field to recieve input from user
		$("input[class='quantity']").focus();
});

});

// Use the .autocomplete() method to compile the list based on input from user
$(".regular-text").autocomplete(“client/inc/get_item_list.php”, {
width: 260,
matchContains: true,
mustMatch: true,
minChars: 2,
//multiple: true,
//highlight: false,
//multipleSeparator: “,”,
selectFirst: true
});

$(".regular-text").result(function(event, data, formatted) {
	$(".code").val(data[1]);
	$(".price").val(data[2]);
		// Give focus to the next input field to recieve input from user
		$("input[class='quantity']").focus();
});
  
});


$(function() {
CalculateSubTotals();
CalculateTotal();
// Adding the change events for the Price and
// quantity fields only..
// Changing the total should not affect anything
$('.quantity , .price').on('change', function() {
    UpdateTotals(this);
});
});

function UpdateTotals(elem) {
// This will give the tr of the Element Which was changed
var $container = $(elem).parent().parent();
var quantity = $container.find('.quantity').val();
var price = $container.find('.price').val();
var subtotal = parseInt(quantity) * parseFloat(price);
$container.find('.subtotal').text(subtotal.toFixed(2));
CalculateTotal();
}

function CalculateSubTotals() {
// Calculate the Subtotals when page loads for the 
// first time
var lineTotals = $('.subtotal');
var quantity = $('.quantity');
var price= $('.price');
$.each(lineTotals, function(i){
    var tot = parseInt($(quantity[i]).val()) * parseFloat($(price[i]).val());
    $(lineTotals[i]).text(tot.toFixed(2));
});
}

function CalculateTotal() {
// This will Itearate thru the subtotals and
// claculate the grandTotal and Quantity here
var lineTotals = $('.subtotal');
var quantityTotal = $('.quantity');
var grandTotal = 0.0;
var totalQuantity = 0;
$.each(lineTotals, function(i) {
    grandTotal += parseFloat($(lineTotals[i]).text());
    totalQuantity += parseInt($(quantityTotal[i]).val())
});

$('.totalquantity').text(totalQuantity);
$('.grandtotal').text(parseFloat(grandTotal).toFixed(2));
};

[/code]

HTML:

<table border="0" id="invoiceitems">
                    <thead>
                        <tr>
                        <td></td>
                        <td><strong>Item ID</strong></td>
                        <td><strong>Description</strong></td>
                        <td><strong>Unit Cost</strong></td>
                        <td><strong>Quantity</strong></td>
                        <td><strong>Total</strong></td>
                        </tr>
                    </thead>
                    <tfoot>
                        <tr>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td><strong>Total:</strong></td>
                        <td>£<label class="grandtotal"></label></td>
                        </tr>
                    </tfoot>
                    <tbody>
                    <tr>
<td><input type="button" class="deleteitem"  value="Delete"/></td>
<td><input type="text" name="item[1][code]" id="id1-1" class="code" value="" disabled="disabled"/></td>
<td><input type="text" name="item[1][desc]" id="id1" class="regular-text" value="" /></td>
<td>£<input type="text" name="item[1][price]" id="id1-3" class="price" value="0.00" disabled="disabled"/></td>
<td><input type="text" name="item[1][quantity]" id="id1-4" class="quantity" value="0" /></td>
<td>£<label class="subtotal"></label></td>
</tr>
                    </tbody>
                    </table>
                    <p><input type="button" id="buttonadd" value="Add Line"/></p>

Also I cant get the delete part to work no matter what I tried so thats why there is no code for it just now.

Any help would be great!

Hi,

I’ve fixed the delete button. You’ll be able to delete the whole row. As for the update, the problem is because you are getting a bunch of elements instead of getting only one. If you want to get a unique element, you must use id, you shouldn’t get elements by class.

[php]

Untitled Document
Item ID Description Unit Cost Quantity Total
Total: £
£ £
[/php]

Let me know how it goes.

Regards,
developer.dex2908
[/code]

That works perfectly and also the issue with it filling in all the wrong fields but sadly it doesn’t work for the first line but works for all the ones you add with the button! :S

Hi,

try this again…

[php]

Item ID Description Unit Cost Quantity Total
Total: £
£ £
[/php]

Regards,
developer.dex2908[/code]

Oops sorry the previous was not updated. try this…

[php]

Item ID Description Unit Cost Quantity Total
Total: £
£ £
[/php]

Regards,
developer.dex2908[/code]

The whole thing doesn’t work now. =/ Sorry for being rather useless. :frowning:

http://www.clockworkhire.co.uk/jstest.html

I have also hit another snag… What I thought would be a really simple thing to change isn’t… I need the subtotal fields to be text fields. Changing them to text fields with the same class doesn’t work. This thing is driving me crazy!

Hey,

Try this again. Its working on my side it should work for you too.

[php]

Untitled Document
Item ID Description Unit Cost Quantity Total
Total: £
£ £
[/php]

Regards,
developer.dex2908[/code]

You are amazing! :smiley: Thanks for all the help and putting up with me! :smiley:

Hi,

Glad i could help :smiley: Just help me promote my site ya?

Regards,
developer.dex2908

I will pop a link somewhere for you. :smiley:

Sponsor our Newsletter | Privacy Policy | Terms of Service