在特定位置单击创建输入字段
Create Input Field on click at specific position
我有一个表单,如果用户单击“添加更多”按钮,我想在其中动态添加输入字段。目前它可以在点击时创建按钮,但按钮不会在我想要的位置创建。这是我的 HTML 代码片段:
window.addEventListener("load", function() {
var addMoreButtons = document.querySelectorAll("#add-more1, #add-more2");
addMoreButtons.forEach(function(button) {
button.addEventListener("click", function() {
console.log(button);
// Create a div
var div = document.createElement("div");
// Create a text input
var text = document.createElement("input");
text.setAttribute("type", "text");
text.setAttribute("name", "More");
text.setAttribute("placeholder", "Weitere hinzufügen");
// add the file and text to the div
div.appendChild(text);
//Append the div to the container div
document.querySelector(".buttonTest").appendChild(div);
});
});
});
<div class="user-details">
<div class="input-box">
<span class="details">Stärken</span>
<input type="text" placeholder="Stärken, z.B. 'Kommunikativ'" id="strenghts">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more1">+ Weitere
hinzufügen</button>
</div>
</div>
<div class="input-box">
<span class="details">Technische Fähigkeiten</span>
<input type="text" placeholder="Technische Fähigkeiten, z.B. 'JavaScript'" id="tech">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more2">+ Weitere hinzufügen</button>
</div>
</div>
</div>
现在每次单击第一个 (#add-more1) 或第二个 (#add-more2) 按钮时,都会在第一个按钮下方创建输入字段。但我希望输入字段出现在单击按钮的位置。例如:
如果单击第一个按钮,我希望在第一个按钮下方创建输入字段。如果单击第二个按钮,我希望在第二个按钮下方而不是在第一个按钮下方创建输入字段。
感谢您的帮助! :)
您需要使用 parentElement
https://www.w3schools.com/jsref/prop_node_parentelement.asp
示例:
window.addEventListener("load", function() {
var addMoreButtons = document.querySelectorAll("#add-more1, #add-more2");
addMoreButtons.forEach(function(button){
button.addEventListener("click", function() {
console.log(button);
// Create a div
var div = document.createElement("div");
// Create a text input
var text = document.createElement("input");
text.setAttribute("type", "text");
text.setAttribute("name", "More");
text.setAttribute("placeholder", "Weitere hinzufügen");
// add the file and text to the div
div.appendChild(text);
//Append the div to the container div
button.parentElement.appendChild(div);
});
});
});
<div class="user-details">
<div class="input-box">
<span class="details">Stärken</span>
<input type="text" placeholder="Stärken, z.B. 'Kommunikativ'" id="strenghts">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more1">+ Weitere
hinzufügen</button>
</div>
</div>
<div class="input-box">
<span class="details">Technische Fähigkeiten</span>
<input type="text" placeholder="Technische Fähigkeiten, z.B. 'JavaScript'" id="tech">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more2">+ Weitere hinzufügen</button>
</div>
</div>
</div>
我已经稍微简化了您的代码,使用 event delegation and [element].insertAdjacentHTML
添加文本输入元素。对于新的文本输入元素,使用旧元素的副本。使用 insertAdjacentHTML
可以控制新元素的放置(这里:after 包含单击按钮的 div,cf afterend
)。
document.addEventListener(`click`, handle);
function handle(evt) {
const bttn = evt.target.closest(`.buttonTest`);
if (bttn) {
const inputElemCopy = bttn.closest(`.input-box`)
.querySelector(`input`).cloneNode(true);
inputElemCopy.name = `${inputElemCopy.id}_more`;
inputElemCopy.removeAttribute(`id`);
bttn.insertAdjacentHTML(
`afterend`,
`<div>${inputElemCopy.outerHTML}</div>`);
}
}
<div class="user-details">
<div class="input-box">
<span class="details">Stärken</span>
<input type="text" placeholder="Stärken, z.B. 'Kommunikativ'"
id="strenghts">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more1">+ Weitere
hinzufügen</button>
</div>
</div>
<div class="input-box">
<span class="details">Technische Fähigkeiten</span>
<input type="text" placeholder="Technische Fähigkeiten, z.B. 'JavaScript'"
id="tech">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more2">+ Weitere
hinzufügen</button>
</div>
</div>
</div>
我有一个表单,如果用户单击“添加更多”按钮,我想在其中动态添加输入字段。目前它可以在点击时创建按钮,但按钮不会在我想要的位置创建。这是我的 HTML 代码片段:
window.addEventListener("load", function() {
var addMoreButtons = document.querySelectorAll("#add-more1, #add-more2");
addMoreButtons.forEach(function(button) {
button.addEventListener("click", function() {
console.log(button);
// Create a div
var div = document.createElement("div");
// Create a text input
var text = document.createElement("input");
text.setAttribute("type", "text");
text.setAttribute("name", "More");
text.setAttribute("placeholder", "Weitere hinzufügen");
// add the file and text to the div
div.appendChild(text);
//Append the div to the container div
document.querySelector(".buttonTest").appendChild(div);
});
});
});
<div class="user-details">
<div class="input-box">
<span class="details">Stärken</span>
<input type="text" placeholder="Stärken, z.B. 'Kommunikativ'" id="strenghts">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more1">+ Weitere
hinzufügen</button>
</div>
</div>
<div class="input-box">
<span class="details">Technische Fähigkeiten</span>
<input type="text" placeholder="Technische Fähigkeiten, z.B. 'JavaScript'" id="tech">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more2">+ Weitere hinzufügen</button>
</div>
</div>
</div>
现在每次单击第一个 (#add-more1) 或第二个 (#add-more2) 按钮时,都会在第一个按钮下方创建输入字段。但我希望输入字段出现在单击按钮的位置。例如: 如果单击第一个按钮,我希望在第一个按钮下方创建输入字段。如果单击第二个按钮,我希望在第二个按钮下方而不是在第一个按钮下方创建输入字段。
感谢您的帮助! :)
您需要使用 parentElement
https://www.w3schools.com/jsref/prop_node_parentelement.asp
示例:
window.addEventListener("load", function() {
var addMoreButtons = document.querySelectorAll("#add-more1, #add-more2");
addMoreButtons.forEach(function(button){
button.addEventListener("click", function() {
console.log(button);
// Create a div
var div = document.createElement("div");
// Create a text input
var text = document.createElement("input");
text.setAttribute("type", "text");
text.setAttribute("name", "More");
text.setAttribute("placeholder", "Weitere hinzufügen");
// add the file and text to the div
div.appendChild(text);
//Append the div to the container div
button.parentElement.appendChild(div);
});
});
});
<div class="user-details">
<div class="input-box">
<span class="details">Stärken</span>
<input type="text" placeholder="Stärken, z.B. 'Kommunikativ'" id="strenghts">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more1">+ Weitere
hinzufügen</button>
</div>
</div>
<div class="input-box">
<span class="details">Technische Fähigkeiten</span>
<input type="text" placeholder="Technische Fähigkeiten, z.B. 'JavaScript'" id="tech">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more2">+ Weitere hinzufügen</button>
</div>
</div>
</div>
我已经稍微简化了您的代码,使用 event delegation and [element].insertAdjacentHTML
添加文本输入元素。对于新的文本输入元素,使用旧元素的副本。使用 insertAdjacentHTML
可以控制新元素的放置(这里:after 包含单击按钮的 div,cf afterend
)。
document.addEventListener(`click`, handle);
function handle(evt) {
const bttn = evt.target.closest(`.buttonTest`);
if (bttn) {
const inputElemCopy = bttn.closest(`.input-box`)
.querySelector(`input`).cloneNode(true);
inputElemCopy.name = `${inputElemCopy.id}_more`;
inputElemCopy.removeAttribute(`id`);
bttn.insertAdjacentHTML(
`afterend`,
`<div>${inputElemCopy.outerHTML}</div>`);
}
}
<div class="user-details">
<div class="input-box">
<span class="details">Stärken</span>
<input type="text" placeholder="Stärken, z.B. 'Kommunikativ'"
id="strenghts">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more1">+ Weitere
hinzufügen</button>
</div>
</div>
<div class="input-box">
<span class="details">Technische Fähigkeiten</span>
<input type="text" placeholder="Technische Fähigkeiten, z.B. 'JavaScript'"
id="tech">
<div class="buttonTest">
<button type="button" class="add-more" id="add-more2">+ Weitere
hinzufügen</button>
</div>
</div>
</div>