2017-07-04 1 views
1

Ich mache ein Programm, und ich frage mich, warum alles, was ich auf meiner HTML-Seite sehe, das Formular ist, aber nur ein einziges. wo die Aufzählung für eine ungeordnete Liste sein sollte. Ich gebe die Benutzereingabe in die Felder ein, aber es zeigt mir nicht die Daten in den Feldern, wie es soll, wenn ich auf "Senden" klicke. Hier ist der Code.Warum funktioniert meine innerHTML-Methode nicht, um Dinge in meinem Kontaktformular aufzulisten?

function getFormElements() { 
    var gather_form_elements = new Array(
     $("#first_name").val(), 
     $("#last_name").val(), 
     $("email").val(), 
     $("#phone_number").val() 
    ); 

    displayValues(gather_form_elements); 
} 

function displayValues(gather_form_elements) { 

    for(i=0; i<gather_form_elements.length; i++) 
    { 
     document.getElementById("contact_info").innerHTML = "<li>" + gather_form_elements[i] + "</li>"; 
    } 
} 
+0

ich auch darauf hinweisen, dass ich diese jQuery bin mit zu machen die Taste, um die erste Funktion aufrufen: $ (document) .ready; (function() { $ ("Button") klicken (function() { getFormElements(); }); .}) –

Antwort

1

Weil Sie es bei jeder Iteration übersteuern. Versuchen Sie, die html zu akkumulieren, bevor innerHTML wie folgt aus:

var html = ""; 
for(var i = 0; i < gather_form_elements.length; i++) { 
    html += "<li>" + gather_form_elements[i] + "</li>"; 
//  ^^ the += is crucial. If you don't use it, it will just replace the content of html (the innerHTML in your code), we need to use += to append to html instead of overriding it. 
} 
document.getElementById("contact_info").innerHTML = html; 

Sie können das gleiche Ergebnis acheive nur eine Zeile Code verwendet:

document.getElementById("contact_info").innerHTML = 
    '<li>' + gather_form_elements.join('</li><li>') + '</li>'; 
+0

Vielen Dank für den Kommentar. Es sieht so aus, als würde es immer noch dasselbe tun. Wenn Sie Ihren Code betrachten, sieht es so aus, als ob er nur eine Variable erstellt und ihr bei jeder Iteration einen neuen Wert gibt. Es sieht so aus, als würde es bei jeder Iteration das Gleiche tun (überschreiben). –

+0

@JustinRoohparvar Nein, es ist nicht das Gleiche. In meiner Version verwende ich '+ =' anstelle von '='. Wenn Sie '=' durch '+ =' in Ihrem Code ersetzen, wird es funktionieren. Ich habe gerade 'html' angesammelt, bevor ich' innerHTML' benutze, so dass wir nicht viel Zeit brauchen und Overhead verursachen. Es ist, wie ich in dem Kommentar "+ =" betont, entscheidend. –

+0

Ich habe gerade Ihre kürzere Join-Version verwendet, und das funktioniert. Nun, was es macht, blinkt auf dem Bildschirm (die richtigen Daten in einer Liste), aber es verschwindet sofort. –

Verwandte Themen