2017-03-20 2 views
0

Grundsätzlich, was ich versuche zu tun, ist auf die Änderung der Zahleneingabe zu einer Liste von Publikationen hinzufügen. Das Problem ist, dass jedes Mal, wenn ich die Eingabe ändere, die vorherige Veröffentlichung und Anzahl der Publikationen beibehalten wird. Zum Beispiel:Hinzufügen zu einer Liste ohne doppelte Publikationen

ich auf den ersten Eingang 2x klicken und das ist, was ich erhalten:

Veröffentlichung 1: Anzahl: 1
Publikation 1: Menge: 2

Was passieren soll, wenn Sie klicken Bei einer Eingabe wird die vorherige Menge überschrieben. So zum Beispiel:

Publikation 1: Anzahl: 1
Veröffentlichung 1: Anzahl 2
Publikation 2: Anzahl 1

Beachten Sie die gestrichener. das sollte nicht mehr existieren. Die Menge wurde aktualisiert. CODEPEN

http://codepen.io/Jesders88/pen/evVrrw

HTML

<input type="number" data-name="something here" data-qty="1" data-id="1"> 
<input type="number" data-name="something else" data-qty="3" data-id="2"> 
<input type="number" data-name="something other" data-qty="5" data-id="3"> 

JAVASCRIPT

publications = new Array; 

$('input').on('change', function(e){ 
    e.preventDefault(); 

    var pid = parseInt($(this).data('id')); // id of thing 
    var name = $(this).data('name'); // name of thing 
    var qty = parseInt($(this).data('qty')); 

    console.log(pid); 
    console.log(name); 
    console.log(qty); 

    if(typeof publications[pid] == 'undefined') 
    { 
    publications[pid] = new Array; 
    publications[pid][0] = name; 
    publications[pid][1] = qty; 
    } 
    else 
    { 
    publications[pid][1] = qty; 
    } 

    console.log(publications); 

    $.each(publications, function(i, l){ 
    //console.log("Index #" + i + ": " + l); 
    console.log(l[0]+' has a qty of: '+l[1]); 
    }); 

}); 

Antwort

1

Es gibt aa paar Probleme hier, was am wichtigsten ist: Sie sind nicht $(this).data('qty') aktualisieren, deshalb ist es immer der gleiche Wert . Ich persönlich würde ein Objekt anstelle eines Arrays verwenden und zu betreiben nur auf qty.value anstelle eines Datenattribut, das in den Eingang repräsentiert von dem tatsächlichen Wert geschieden wird:

// use an object 
var publications = {}; 

$('input').on('change', function(e){ 
    e.preventDefault(); 

    var pid = parseInt($(this).data('id'), 10); // id of thing 
    var name = $(this).data('name'); // name of thing 
    var qty = parseInt($(this).val(), 10); 

    // if you must, set the new quantity into the data property 
    $(this).data('qty', qty); 

    console.log(pid); 
    console.log(name); 
    console.log(qty); 

    if(!publications[pid]) 
    { 
    publications[pid] = { 
     name: name, 
     qty: qty 
    }; 
    } 
    else 
    { 
    publications[pid].qty = qty; 
    } 

    console.log(publications); 

    $.each(publications, function(i, l){ 
    //console.log("Index #" + i + ": " + l); 
    console.log(l.name+' has a qty of: '+l.qty); 
    }); 

}); 
+0

super. So einfach. Ich kann nicht glauben, dass ich es verpasst habe :). Danke für Ihre Hilfe. – jesders88

Verwandte Themen