2011-01-12 6 views
0

Diese Funktion ist ein Problem:warum diese Javascript-Funktion nicht ausgeführt wird, kein Fehler in der Konsole

function addInvoiceItemValue(name,pkwiu,netto,unit,qty,vat) { 

if(vat == '23') v23 = " selected='selected'"; 
if(vat == '22') v22 = " selected='selected'"; 
if(vat == '8') v8 = " selected='selected'"; 
if(vat == '7') v7 = " selected='selected'"; 
if(vat == '5') v5 = " selected='selected'"; 
if(vat == '3') v3 = " selected='selected'"; 
if(vat == '0') v0 = " selected='selected'"; 
if(vat == 'zw') vzw = " selected='selected'"; 

var vatSelect = "<option value='23'"+v23+">23%</option><option value='22'"+v22+">22%</option><option value='8'"+v8+">8%</option><option value='7'"+v7+">7%</option><option value='5'"+v5+">5%</option><option value='3'"+v3+">3%</option><option value='0'"+v0+">0%</option><option value='zw'"+vzw+">zw.</option>"; 
var row = "<tr id='item" + itemID + "'><td><input size='30' maxlength='300' id='ii-name-" + itemID + "' name='ii-name-" + itemID + "' value='" + name + "'></td>"; 
row += "<td><input size='6' maxlength='50' id='ii-pkwiu-" + itemID + "' name='ii-pkwiu-" + itemID + "' value='"+pkwiu+"'></td>"; 
row += "<td><input size='6' maxlength='16' id='ii-netto-" + itemID + "' name='ii-netto-" + itemID + "' value='"+netto+"'></td>"; 
row += "<td><input size='5' maxlength='128' id='ii-unit-" + itemID + "' name='ii-unit-" + itemID + "' value='"+unit+"'></td>"; 
row += "<td><input size='5' maxlength='6' id='ii-qty-" + itemID + "' name='ii-qty-" + itemID + "' value='"+qty+"'></td>"; 
row += "<td><select id='ii-vat-" + itemID + "' name='ii-vat-" + itemID + "'>" + vatSelect + "</select></td>"; 
row += "<td><a onclick='delInvoiceItem(\"item" + itemID + "\")'><b>-</b> Usuń</a></td></tr>"; 

$('#invoiceItems tr:last').after(row); 

itemID++; 
} 

Beispiel Ausführung:

addInvoiceItemValue('yyy','','676.76','','1','23'); 
addInvoiceItemValue('fgh','','777.00','','1','8'); 

Und hier ist Funktion, die Arbeit ist in Ordnung:

function addInvoiceItem() { 

var vatSelect = "<option value='23'>23%</option><option value='22'>22%</option><option value='8'>8%</option><option value='7'>7%</option><option value='5'>5%</option><option value='3'>3%</option><option value='0'>0%</option><option value='zw'>zw.</option>"; 
var row = "<tr id='item" + itemID + "'><td><input size='30' maxlength='300' id='ii-name-" + itemID + "' name='ii-name-" + itemID + "' value=''></td>"; 
row += "<td><input size='6' maxlength='50' id='ii-pkwiu-" + itemID + "' name='ii-pkwiu-" + itemID + "' value=''></td>"; 
row += "<td><input size='6' maxlength='16' id='ii-netto-" + itemID + "' name='ii-netto-" + itemID + "' value='0'></td>"; 
row += "<td><input size='5' maxlength='128' id='ii-unit-" + itemID + "' name='ii-unit-" + itemID + "' value=''></td>"; 
row += "<td><input size='5' maxlength='6' id='ii-qty-" + itemID + "' name='ii-qty-" + itemID + "' value='1'></td>"; 
row += "<td><select id='ii-vat-" + itemID + "' name='ii-vat-" + itemID + "'>" + vatSelect + "</select></td>"; 
row += "<td><a onclick='delInvoiceItem(\"item" + itemID + "\")'><b>-</b> Usuń</a></td></tr>"; 

$('#invoiceItems tr:last').after(row); 

itemID++; 
} 
+0

Und Ihre Frage ist? Und die Fehler sind? – Oded

+0

"Kein Fehler in der Konsole", die erste Funktion wird nicht ausgeführt. Warum? Was ist falsch? – shman

+0

Woher kommen die "v-Variablen"? (v23, v22, v8 usw.) –

Antwort

3

Die v23, v22, v8, v7, v5, v3, v0, vzw und itemdID sind nicht immer in allen Codepfaden definiert.

Dies führt zum Fehlschlagen des Skripts.


Sie sollten Ihre Funktion

function addInvoiceItemValue(name,pkwiu,netto,unit,qty,vat) { 
    var vats = ['23','22','8','7','5','3','0','zw']; 

    var vatSelect = ''; 
    for (var i = 0; i < vats.length; i++) 
    { 
     vatSelect += '<option value="'+vats[i]+'"'; 
     if (vat == vats[i]) 
      vatSelect += ' selected="selected"'; 
     vatSelect += '>'+vats[i] + '%</option>'; 
    } 

    var row = "<tr id='item" + itemID + "'><td><input size='30' maxlength='300' id='ii-name-" + itemID + "' name='ii-name-" + itemID + "' value='" + name + "'></td>"; 
    row += "<td><input size='6' maxlength='50' id='ii-pkwiu-" + itemID + "' name='ii-pkwiu-" + itemID + "' value='"+pkwiu+"'></td>"; 
    row += "<td><input size='6' maxlength='16' id='ii-netto-" + itemID + "' name='ii-netto-" + itemID + "' value='"+netto+"'></td>"; 
    row += "<td><input size='5' maxlength='128' id='ii-unit-" + itemID + "' name='ii-unit-" + itemID + "' value='"+unit+"'></td>"; 
    row += "<td><input size='5' maxlength='6' id='ii-qty-" + itemID + "' name='ii-qty-" + itemID + "' value='"+qty+"'></td>"; 
    row += "<td><select id='ii-vat-" + itemID + "' name='ii-vat-" + itemID + "'>" + vatSelect + "</select></td>"; 
    row += "<td><a onclick='delInvoiceItem(\"item" + itemID + "\")'><b>-</b> Usuń</a></td></tr>"; 

    $('#invoiceItems tr:last').after(row); 

    itemID++; 
} 

ändern, aber die ItemID hat auch festgelegt werden.

+0

v23, v22, v8, v7, v5, v3, v0, vzw sind Defined Inside Function und ItemdID ist außerhalb der Funktion definiert. – shman

+0

'if (vat == '23') v23 =" selected = 'selected' ";' Was passiert, wenn MwSt nicht gleich '23' ist? –

+0

@shman, aktualisierte Antwort mit einer Problemumgehung, die die Erstellung der Optionen automatisiert. –

0

Wann wird die Ausführung ausgeführt?

Während dies technisch schlecht Codierung der Praxis-Test mit diesem:

<a href='#' onClick="javascript: function('value');" > Click Me </a> 

Wenn Sie klicken, und es immer noch nicht funktioniert, ist es ein Problem mit Ihrer Funktion ist. Wenn Sie klicken und es funktioniert, wird die Funktion nie an erster Stelle aufgerufen.

+0

Es ist mit Seitenteil geladen (jQuery.load()) – shman

+0

hast du einen Alert ('test') in die erste Zeile eingefügt? Im Allgemeinen können Sie sich durch etwas so alarmieren, als ob Sie eine Konsolenansicht hätten. – Scott

+0

yep, Ihr Kommentar hat geholfen, dieses Problem zu beheben. Lösung: – shman

0

Sie sollten auch Ihren Selektor überprüfen.

$('#invoiceItems tr:last').after(row); 

versuchen, es in einem einfacheren Ort hinzufügen. Machen Sie ein anderes Div, ...

Dann verwenden Sie den Selektor $ ('# Ergebnis');

In jedem Fall, wenn Ihr Selektor ist schlecht, wird es nie ausgeführt werden und es wird keinen Fehler b/c werfen es hatte nie Ursache zu tun, was Sie ihm gesagt haben. Jetzt, wo ich darüber nachdenke, denke ich, dass dies das Problem ist.

Tu mir einen Gefallen und versuchen

$('#invoiceItems tr:last').each(alert('exist???')); 

Wenn es nicht auf die Warnung der Fall ist, ist Ihr Wähler höchstwahrscheinlich funktioniert nicht. (Für jede Sache, die die Kriterien erfüllt, machen Sie eine Warnung)

+0

Selector funktioniert, gibt Hinweise. – shman

+0

Kühl. Am Ende war das nicht das Problem. Ich weiß, das sind nur kleine, kleine Dinge, die bei allgemeinen Fehlersuchen zur Anwendung kommen. Schwierig mit dem Kerl zu konkurrieren, der die Funktion neu schreibt! :) – Scott

Verwandte Themen