Javascript 使用选定的HTML选项重新呈现表单
Javascript 使用选定的HTML选项重新呈现表单,javascript,html,express,ejs,Javascript,Html,Express,Ejs,我有一个表单,如果有任何错误,它会重新呈现,并使用任何有效的输入重新呈现。我还想使用元素中的所选选项重新呈现表单,但我仍在努力
// controller.js
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.render("quotes", {
form: req.body,
我有一个表单,如果有任何错误,它会重新呈现,并使用任何有效的输入重新呈现。我还想使用元素中的所选选项重新呈现表单,但我仍在努力
// controller.js
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.render("quotes", {
form: req.body,
errors: errors.array(),
yes: 'selected'
});
return;
// quotes.ejs
<label for="propertyType">Type of Property</label> <br />
<select name="propertyType">
<option value="Building Lot">Building Lot</option>
<option value="Condo - Appartment">Condo - Appartment</option>
<option value="Co-op">Co-op (Owned)</option>
<option value="Duplex">Duplex</option>
// my poor solutions below
<option selected value="<%= locals.form? form.propertyType : '' %>"><%= locals.form? form.propertyType : '' %></option>
<option value="Single Family Home" <% if (locals.errors) { %> selected="<%- yes %>" <% } %>>Single Family Home</option>
</select>
//controller.js
(请求、恢复、下一步)=>{
常量错误=验证结果(req);
如果(!errors.isEmpty()){
res.render(“引号”{
表格:要求正文,
错误:errors.array(),
是:'选定'
});
返回;
//quotes.ejs
属性类型
建筑用地
公寓公寓
合作社(自有)
双工
//下面是我拙劣的解决方案
独栋住宅
我最接近的解决方案在最后2个标签中(我知道它们可能是糟糕的解决方案,这就是为什么我在这里)
如果您有任何帮助,我们将不胜感激!谢谢:)最好的解决方案是通过AJAX请求发布您的from。这样您就不会重新提交页面,并且可以保留您的输入数据
由于您选择了重新呈现选项,我认为最优雅的方式是通过客户端javascript。
首先,在控制器函数中,返回选定的输入值
if (!errors.isEmpty()) {
res.render("quotes", {
selected: req.body.propertyType,
errors: errors.array()
});
....
在quotes.ejs中,您只需添加一个小脚本
// html code
<label for="propertyType">Type of Property</label> <br />
<select name="propertyType">
<option value="Building Lot">Building Lot</option>
<option value="Condo - Appartment">Condo - Appartment</option>
<option value="Co-op">Co-op (Owned)</option>
<option value="Duplex">Duplex</option>
</select>
// html code
<% if (locals.errors) { %>
// the following will run only if errors exist
<script>
var selectedInput = "<%= selected %>";
var options = document.querySelector('[name="propertyType"]');
for (var i = 0; i < options.length; i++) {
if (selectedInput === options[i].value) {
options[i].selected = 'selected';
break;
}
}
</script>
<% } %>
//html代码
属性类型
建筑用地
公寓公寓
合作社(自有)
双工
//html代码
//仅当存在错误时,才会运行以下命令
var selectedInput=“”;
var options=document.querySelector('[name=“propertyType”]');
对于(变量i=0;i
脚本将在出现任何呈现错误时运行。它将循环选择输入的选项,并检查选项值是否等于提交的值。如果为真,它将使选项处于选中状态。有没有办法将express validator与ajax一起使用,还是完全不同?我明白你的意思,我现在正在寻找一种方法为了避免重新提交整个pageexpress验证程序,您可以使用它来验证和清理输入数据。它与向客户端返回数据的方式无关。