2016-03-27 3 views
0

habe ich eine sehr einfache Struktur TischParsing durch Tabelle Anfangswerte liefert jQuery anstatt aktuelle

<table id="mytable"> 
<tr> 
    <th>Content</th> 
    <th>Options</th> 
</tr> 
<tr> 
    <td class="content"><input type="text" value="my initial value"></td> 
    <td class="option"> 
    <select> 
    <option value="value1" >Value#1</option> 
    <option value="value2" >Value#2</option> 
    <option value="value3" >Value#3</option> 
    </select> 
    </td> 
</tr> 
... 
</table> 
<input type="button" onclick="javascript:doIt()" value="do it";> 

Was ich um parsen eine JSON zu erstellen anschließend auf jeweils mit chgContentToValue einer der Werte in die schreiben Eingabefeld.

function doIt() { 
    var i = 0; 
    var json = {}; 
    $("#mytable tr").each(function() { 
    var content = $(this).find(".content").html(); 
    var option = $(this).find(".option").html(); 

    if (content != undefined) { 
     content = $(content).val(); 
     option = $(option).val(); 

     var line = {}; 
     line['content'] = content; 
     line['option'] = option; 
     json[i] = line; 
     i++; 
    } 
    }); 
    json = JSON.stringify(json); 
    alert(json); 
} 

Ausführung:

  • öffnen HTML
  • Änderungswert des Eingabefeldes und/oder einen anderen Wert bei der Auswahl
  • Hit-Taste

ich am Ende immer mit die Anfangswerte anstelle derer, die vom Benutzer geändert/eingegeben wurden. Bitte geben Sie an, was mein Fehler ist, wie ich die letzten Werte der Eingabefelder & auswählen kann. Vielen Dank!

+0

Wann rufen Sie den oberen JS-Code an? Wenn Sie es nur einmal aufrufen und nicht wieder, nachdem der Benutzer etwas eingegeben hat, ist das der Grund – zeropublix

+0

tkx zeropublix, aber ich kann in die Eingabefelder etwas eingeben und die Methode auslösen, die den obigen JS mehrere Male sogar Minuten später enthält. jedes Mal werden die Anfangswerte anstelle der neuen Werte verwendet. –

+0

Sie müssten mehr Code erhalten, um weiter zu sehen, da 'height = $ (height) .val()' keinen Sinn macht – zeropublix

Antwort

0

Versuchen Sie, die html Erste wird immer das Element zurück, wie es gemacht wurde und nicht, wie es ist jetzt. Versuchen Sie es stattdessen.

$("#mytable tr").each(function() { 
var content = $(this).find(".content input"); 
var option = $(this).find(".option select"); 

if (content.length > 0) { 
    content = content.val(); 
    option = option.val(); 

    var line = {}; 
    line['content'] = content; 
    line['option'] = option; 
    json[i] = line; 
    i++; 
} 
}); 
+0

Vielen Dank Steve, das hat perfekt funktioniert! –

0

Sie seltsame Dinge mit html() auf Formular Steuerelemente tun, wenn alles, was Sie brauchen value ist

$("#mytable tr").each(function (i) { 
    // get value not html 
    var content = $(this).find(".content").val(); 
    var option = $(this).find(".option").val(); 

    if (content) {  
    var line = { 
     content: content, 
     option : option 
    };  
    json[i] = line; 
    // i++; not needed because index is already available in `each` 
    } 
}); 
json = JSON.stringify(json); 
+0

vielen Dank, aber das funktioniert nicht. Ich benutze das seltsame 'html()', um zuerst den td-Wert zu erhalten und später 'val()' in der entsprechenden Auswahl des Eingabefeldes. –