Jquery 如何在加载时设置输入字段中的值
我有一个JSP,在这里我动态地读取一些值。根据我收到的值的数量,我希望动态添加字段,如果用户愿意,可以在相同的序列中添加更多字段 我被卡住了,无法在启动时动态加载的字段中添加值Jquery 如何在加载时设置输入字段中的值,jquery,jsp,Jquery,Jsp,我有一个JSP,在这里我动态地读取一些值。根据我收到的值的数量,我希望动态添加字段,如果用户愿意,可以在相同的序列中添加更多字段 我被卡住了,无法在启动时动态加载的字段中添加值 <fieldset id="statusETA" name="statusETA"></fieldset> </br> <script type="text/javascript"
<fieldset id="statusETA" name="statusETA"></fieldset> </br>
<script type="text/javascript">
$(document).ready(function() {
$("#add").click(function() {
var lastField = $("#statusETA div:last");
var intId = (lastField && lastField.length && lastField.data("idx") + 1) || 1;
var fieldWrapper = $("<div class=\"fieldwrapper\" id=\"field" + intId + "\"/>");
fieldWrapper.data("idx", intId);
var fName = $("<input type=\"text\" class=\"fieldname\" name=\"status\"/>");
var fType = $("<input type=\"date\" name=\"eta\"/>");
var removeButton = $("<input type=\"button\" class=\"remove\" value=\"-\" />");
removeButton.click(function() {
$(this).parent().remove();
});
fieldWrapper.append(fName);
fieldWrapper.append(fType);
fieldWrapper.append(removeButton);
$("#statusETA").append(fieldWrapper);
});
});
</SCRIPT>
$(文档).ready(函数(){
$(“#添加”)。单击(函数(){
var lastField=$(“#statusETA div:last”);
var intId=(lastField&&lastField.length&&lastField.data(“idx”)+1)| 1;
var fieldWrapper=$(“”);
fieldWrapper.data(“idx”,intId);
变量fName=$(“”);
var fType=$(“”);
var removeButton=$(“”);
移除按钮。单击(函数(){
$(this.parent().remove();
});
fieldWrapper.append(fName);
fieldWrapper.append(fType);
fieldWrapper.append(removeButton);
$(“#statusETA”).append(fieldWrapper);
});
});
我想在status(输入字段)和eta(日期字段)中设置值,我将从请求变量中检索这些值
非常感谢您的帮助。您的代码有太多错误,很难说您在这里想要实现什么。乍一看:
- 请用更具可读性的术语描述您的目标和问题。我们不在你脑子里
- 请正确缩进和格式化您的代码,以便我们能够轻松阅读
- 不要使用scriptlet标记is-jsp(这些东西至少从2009年起就被弃用了)。您应该研究JSTL/el
- 您应该完全从JSP生成初始HTML,然后为用户提供一种使用JavaScript附加某些字段的方法,可能是使用JSP制作某种HTML模板(不可见),然后根据需要复制它
DataFilter.Java
import java.io.IOException;
导入javax.servlet.Filter;
导入javax.servlet.FilterChain;
导入javax.servlet.FilterConfig;
导入javax.servlet.ServletException;
导入javax.servlet.ServletRequest;
导入javax.servlet.ServletResponse;
导入javax.servlet.annotation.WebFilter;
@WebFilter(urlPatterns=“/data.jsp”)
公共类DataFilter实现过滤器{
@凌驾
public void init(FilterConfig arg0)抛出ServletException{}
@凌驾
public void destroy(){}
@凌驾
公共无效doFilter(ServletRequest-req、ServletResponse-res、FilterChain链)
抛出IOException、ServletException{
字符串[]状态={“状态1”、“状态2”、“状态3”};
字符串[]eta={“2021-05-01”、“2021-05-02”、“2021-05-03”};
请求设置属性(“状态”,状态);
请求设置属性(“eta”,eta);
链式过滤器(要求、恢复);
}
}
JSP文件data.JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Tomcat test</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(_e => {
const fields = $('.fields');
let lastEntryNum = fields.find('.fieldWrapper').length;
addRemoveHandler(fields.find('button.remove'));
$('#adder-form').on('submit', e=> {
e.preventDefault();
const jqfrm = $(e.target).closest('form');
const frm = jqfrm[0];
const template = $('#field-row-template .field-row').clone();
template.prop('id', template.prop('id') + (++lastEntryNum));
template.find('*[name="status"]').val(frm.status.value);
template.find('*[name="eta"]').val(frm.eta.value);
const remBut = template.find('button.remove');
remBut.value = lastEntryNum;
fields.append(template);
addRemoveHandler(remBut);
frm.reset();
});
function addRemoveHandler(jQButton) {
jQButton.on('click', e => {
e.preventDefault();
$(e.target).closest('.fieldwrapper').remove();
});
}
});
</script>
</head>
<body>
<main>
<div class="fields">
<h5>Data:</h5>
<c:forEach items="${requestScope.status}" varStatus="fstat" var="curStatus">
<c:set var="curEta" value="${requestScope.eta[fstat.index]}" />
<div class="fieldwrapper" id="field-${fstat.index}">
<input type="text" class="fieldname" name="status" value="<c:out value="${curStatus}" />" />
<input type="date" name="eta" value="${curEta}" />
<button type="button" class="remove" name="remove" value="${fstat.index}">-</button>
</div>
</c:forEach>
</div>
<form name="adder" id="adder-form">
<h5>Add row:</h5>
<input type="text" class="fieldname" name="status" />
<input type="date" name="eta" />
<button type="submit" name="add">Add</button>
</form>
</main>
<template id="field-row-template">
<div class="field-row">
<div class="fieldwrapper" id="field-">
<input type="text" class="fieldname" name="status" required="required" />
<input type="date" name="eta" required="required" />
<button type="button" class="remove" name="remove" value="${fstat.index}">-</button>
</div>
</div>
</template>
</body>
</html>
我在JSP方面没有太多的经验,但据我所知,如果您只是将作为输入的value属性,您可能可以跳过使用jQuery来插入所有字段。现在您已经编辑掉了所有JSP代码。为了回答你最初的问题,花了这么多时间。如果你在开始发帖之前就想到了,那就太好了……谢谢大家的帮助,特别是朱利安。我会试试你的建议。
<c:forEach items="${requestScope.dataMap}" varStatus="fstat" var="entry">
<div class="fieldwrapper" id="field-${fstat.index}">
<input type="text" class="fieldname" name="status" value="<c:out value="${entry.key}" />" />
<input type="date" name="eta" value="${entry.value}" />
<button type="button" class="remove" name="remove" value="${fstat.index}">-</button>
</div>
</c:forEach>