2017-02-17 6 views
2

Ich habe gerade eine Prüfung für eine meiner Klassen abgeschlossen, und eine der Fragen erforderte uns, ein einfaches HTML-Dokument zu erstellen. Wir sollten etwas JavaScript-Code einfügen, der den Text von txtA kopieren und in txtB einfügen würde, aber wenn ich auf den Button klicke, passiert nichts.Warum wird meine JavaScript-Funktion nicht ausgeführt?

function CopyAToB() { 
 
    var a = document.form1.txtA.value; 
 
    document.form1.txtB.value = a; 
 
}
div { 
 
    text-align: center; 
 
    color: red; 
 
    font-size: 42px; 
 
}
<div>The University of Akron</div> 
 
<form id="form1"> 
 
    <input type="text" id="txtA" /> 
 
    <input type="text" id="txtB" /> 
 
    <input type="button" value="Copy" onclick="CopyAToB();" /> 
 
</form>

+1

Deshalb Browser-Entwickler-Tools-Konsole - überprüfen Sie Ihre Konsole für Fehler ... Sie wollen 'document.forms.form1 ... etc' –

+0

Erhalten Sie eine Ausnahme? Wird die Seite neu geladen, ohne dass Sie es bemerken? – Bergi

Antwort

5

Sie verwenden veraltete Legacy-DOM tun, um sich auf die Formularelemente, die auf das name-Attribut statt auf die ID fokussieren. Zum Beispiel funktioniert der Code, wenn Sie die IDs Namen ändern Attribute:

function CopyAToB() { 
 
    var a = document.form1.txtA.value; 
 
    document.form1.txtB.value = a; 
 
}
div { 
 
    text-align: center; 
 
    color: red; 
 
    font-size: 42px; 
 
}
<div>The University of Akron</div> 
 
<form name="form1"> 
 
    <input type="text" name="txtA" /> 
 
    <input type="text" name="txtB" /> 
 
    <input type="button" value="Copy" onclick="CopyAToB();" /> 
 
</form>

Ich würde sehr empfehlen, dass Sie das nicht tun und etwas mehr verwenden auf dem neuesten Stand wie:

function CopyAToB() { 
 
    var a = document.getElementById('txtA').value; 
 
    document.getElementById('txtB').value = a; 
 
}
div { 
 
    text-align: center; 
 
    color: red; 
 
    font-size: 42px; 
 
}
<div>The University of Akron</div> 
 
<form id="form1"> 
 
    <input type="text" id="txtA" /> 
 
    <input type="text" id="txtB" /> 
 
    <input type="button" value="Copy" onclick="CopyAToB();" /> 
 
</form>

+0

Obwohl für dieses Testproblem nicht notwendig, empfehle ich Ihnen, wie Sie [addEventListener] (https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener) anstelle von 'onclick =" function "verwenden können. 'wenn Sie jemals ernsthafte Javascript-Arbeit machen werden. Es gibt weitere SO-Lesung unter http://stackoverflow.com/questions/6348494 –

2

ändern CopyAToB Funktion:

function CopyAToB() { 
 
    var txtA = document.getElementById("txtA"); 
 
    var a = txtA.value; 
 
    var txtB = document.getElementById("txtB"); 
 
    txtB.value = a; 
 
}
div { 
 
    text-align: center; 
 
    color: red; 
 
    font-size: 42px; 
 
}
<div>The University of Akron</div> 
 
<form id="form1"> 
 
    <input type="text" id="txtA" /> 
 
    <input type="text" id="txtB" /> 
 
    <input type="button" value="Copy" onclick="CopyAToB();" /> 
 
</form>

Sie benötigen die getElementbyId Funktion verwenden, um die Textfelder zu finden; Die Art und Weise, wie Sie es versuchen, ist Vermächtnis, wie j08691 herausstellte.

+0

Was meinen Sie mit _ "Sie können nicht direkt auf sie verweisen" _? – j08691

+0

Sie können, müssen Sie ihnen nur einen 'Namen' anstelle einer' ID' geben. Mit 'id' können Sie das auch tun: 'var txtA = document.getElementById (" txtA "). Value;', Sie brauchen die zusätzliche Zeile nicht. Tatsächlich können Sie das wahrscheinlich tun: 'document.getElementById (" txtB "). Value = document.getElementById (" txtA "). Value;'. Das ist nur eine Zeile;) – myfunkyside

-3

Sie sollten das Skript in einer anderen Datei platzieren und das Skript schließen Sie müssen nur die folgenden

<script src="nameofscript.js"></script> 

Quelle Notation

+2

Das löst das Problem von OP nicht. – bejado

+3

Obwohl ich zustimme, dass dies in der Regel die beste Vorgehensweise ist, ist es keine Antwort auf die Frage und spricht keines der Probleme im Skript an. – Brian

0

Sie müssen Ihr Javascript ändern, um das Element nach ID explizit auszuwählen, weil der Grund, warum es nicht funktioniert, ist, weil txtA undefiniert ist, wie Jaromanda X sagte, ist dev-Konsole Ihr Freund. Probieren Sie etwas wie folgt aus:

var txtA = document.getElementById("txtA").value; 
var txtB = document.getElementById("txtB"); 
txtB.value = txtA; 
+0

Warum nicht Ihre letzte Zeile einfach 'txtB.value = txtA'? – bejado

0
function CopyAToB() { 
    var a = document.getElementById('txtA'); 
    var b = document.getElementById('txtB'); 
    b.value = a.value; 
} 

Sie können die HTML-Element wählen document.getElementById() verwenden. w3schools hat einige großartige Tutorials für HTML/Javascript Anfänger. https://www.w3schools.com/jsref/met_document_getelementbyid.asp

0

ich eine eventlistener auf die Schaltfläche stattdessen befestigen würde,

und mit modernen Javascript brauchen wir nicht einmal document.getElement verwenden ... solange wir sicherstellen, dass die ID des HTML-Element ist über einzigartige sowohl html als auch javascript (zB nein var form1_txtA = "etwas nicht verwandt";) dann ist die ID alles was wir brauchen,

form1_txtB.value wird den gleichen Job machen. Notiz Ich habe ein Präfix, Form1_, zu Ihrer ID hinzugefügt, alles durch, es ist nicht erforderlich, ich mag klare IDs, die erzählt, was und wo es herkommt.

form1_button.addEventListener('click', CopyAToB); 
 

 
function CopyAToB() { 
 
    form1_txtB.value = form1_txtA.value; 
 
}
div { 
 
    text-align: center; 
 
    color: red; 
 
    font-size: 42px; 
 
}
<div>The University of Akron</div> 
 
<form id="form1"> 
 
    <input type="text" id="form1_txtA" /> 
 
    <input type="text" id="form1_txtB" /> 
 
    <input type="button" id="form1_button" value="Copy"/> 
 
</form>

Verwandte Themen