Ich arbeite an der Interaktivität eines einfachen HTML-Formulars.Warum wird mein Textfeld nicht zur Seite hinzugefügt?
Insbesondere gibt es eine Dropdown-Auswahlbox für Jobrollen. Wenn "Andere" ausgewählt ist, sollte ein Textfeld angezeigt werden, in dem der Benutzer aufgefordert wird, genauer zu sein.
Ich bin ein Anfänger und möchte dies ohne jQuery tun.
Hier ist ein Ausschnitt aus dem HTML mit denen ich arbeite:
<fieldset class="basic">
<legend>Basic Info</legend>
<label for="name">Name:</label>
<input type="text" id="name" name="user_name">
<label for="mail">Email:</label>
<input type="email" id="mail" name="user_email">
<label>Job Role</label>
<select id="title" name="user_title">
<option value="full-stack js developer">Full Stack JavaScript Developer</option>
<option value="front-end developer">Front End Developer</option>
<option value="back-end developer">Back End Developer</option>
<option value="designer">Designer</option>
<option value="student">Student</option>
<option value="other">Other</option>
</select>
</fieldset>
Meine Intuition sagt mir, dass es Attribute, zuerst das Textfeld zu erstellen und hinzuzufügen.
Ich werde dann eine if-Bedingung verwenden, um zu testen, ob die ausgewählte Option "andere" ist oder nicht. Wenn dies der Fall ist, füge ich das neu erstellte Textfeld an die Seite an.
Dies hat bisher nicht funktioniert. Um dies zu debuggen, habe ich versucht, die Elemente zu protokollieren, mit denen ich arbeiten möchte. Ich glaube nicht, dass ich verstehe, wie das funktioniert, da es "undefiniert" und "null" ausgibt.
Hier ist meine JS:
// AUFGABE: Interaktivität hinzufügen
'use strict';
// Hold DOM elements for easy access
var pageBody = document.querySelector('body');
var jobRoleSelect = document.getElementById('title');
console.log(jobSelected);
var jobSelected = jobRoleSelect.options[jobRoleSelect.selectedIndex].value;
var basicSection = document.querySelector('basic');
console.log(basicSection);
// Job Role section of the form. Reveal a text field when the "Other" option is selected from the "Job Role" drop down menu
if(jobSelected === 'other') {
var otherText = document.createElement('input');
// Add an text input field. Use the id of "other-title"
otherText.setAttribute('id', 'other-title');
otherText.setAttribute('type', 'text');
otherText.setAttribute('name', 'other_field');
otherText.setAttribute('placeholder', 'Your Title');
var otherLabel = document.createElement('label');
otherLabel.setAttribute('for', 'other_field');
otherLabel.innerHTML = 'other';
basicSelection.appendChild(otherLabel);
basicSelection.appendChild(otherText);
}
Wo ist Ihr JS-Code aufgerufen aus? Für Ihre Zwecke sollte es in einer Funktion sein, die von einem Änderungsereignishandler auf dem Auswahlelement aufgerufen wird. Um '.querySelector()' zu verwenden, um ein Element mit der Klasse '' basic '' auszuwählen, müssen Sie vor dem Klassennamen ein '.' setzen, wie' document.querySelector ('. Basic') '. Außerdem können Sie den ausgewählten Wert eines select-Elements einfacher erhalten: Verwenden Sie einfach 'jobRoleSelect.value', und müssen Sie nicht über die '.options'-Sammlung gehen. (Unabhängig von dem Problem, das Sie haben, sollte das "for" -Attribut in Ihrem Label auf die ID des assoziierten Elements und nicht auf seinen Namen gesetzt werden.) – nnnnnn
Vielen Dank, dass Sie das fehlende '.' für den querySelector gefunden haben. Ich habe das vergessen. Ich habe die JS am unteren Rand des Körpers in meinem HTML angehängt. Ich weiß, dass es in Ordnung verbunden ist, da ein anderes Feature in Ordnung ist. Also kann ich nur verwenden: 'var jobSelected = jobRoleSelect.value ' und dann in der if-Bedingung, verwenden Sie' if (jobSelected ===' andere ') '? – gloopit