【问题标题】:Laravel Blade : how do i make textarea show on clicking add moreLaravel Blade:如何在单击添加更多时显示 textarea
【发布时间】:2021-10-14 04:51:27
【问题描述】:
我有这个学校申请,我想往数据库里加100道题,正常的做法是一个接一个地加,也就是我会点击提交100次....精疲力竭....现在,我想创建一个应用程序,我必须查询一次数据库,即提交按钮旁边会有一个添加更多按钮,但如果我单击添加更多,它应该在下面显示另一个文本区域...... ...但是如果我点击保存,它应该保存到数据库中
<form method="post" action={{route('save.question', $subject->slug)}} >
@csrf
<textarea name="questions"></textarea>
<button type='submit'>Submit</button>
<button type=''>Add more question</button>
</form>
【问题讨论】:
标签:
javascript
laravel
laravel-blade
【解决方案1】:
有一些方法,但我更喜欢:
- 如果点击
Add more question按钮,添加一个文本区域输入到DOM
- 如果点击
Submit,将所有textarea 值添加到javascript 数组中
- 对数组进行字符串化
- 将其发送到隐藏的输入中
- 在 PHP 中使用
json_decode() 解码该输入值
所以:
let questionsContainer = document.querySelector("#questions-container");
let addQuestionTextarea = document.querySelector("#add-question-textarea");
addQuestionTextarea.onclick = () => {
let textarea = document.createElement("textarea");
questionsContainer.appendChild(textarea);
}
let submit = document.querySelector("#submit");
submit.onclick = () => {
collectValues();
}
function collectValues(){
let allTextareas = questionsContainer.getElementsByTagName('textarea');
allTextareas = [...allTextareas]
let allValues = [];
allTextareas.forEach((textarea)=>{ allValues.push(textarea.value) });
document.getElementById('questions-array').value = JSON.stringify(allValues);
document.getElementById("form").submit();
}
textarea{
display:block;
margin: 8px;
}
<div id="questions-container">
<textarea></textarea>
</div>
<button id="add-question-textarea">Add more question</button>
<form method="post" action={{route('save.question', $subject->slug)}} id="form">
@csrf
<input type="text" id="questions-array" hidden name="questions">
</form>
<button id="submit">Submit</button>