每当我从 <s:select />
中选择一个值时下拉框填充我的 < s:form>
的该表中的其余值.我正在使用的列表是一个占位符,但不应该影响它。
此外,这只会在我更改默认设置时发生
表格代码:
<table id="pricingInput" class="footable" style="width: 700px; table-layout: fixed; margin-left: auto; margin-right: 25px; float:right; margin-bottom:50px;">
<thead><tr><th style="text-align: center;">Account Name</th><th style="text-align: center;">Annual kWh Volume</th><th style="text-align: center">Rate Class</th><th style="text-align: center;">Add Another?</th></tr></thead>
<tr>
<td><s:textfield name="nameHolder" /></td>
<td><s:textfield name="volumeHolder" /></td>
<td><s:select headerValue="Choose Rate Class" name="rateClass" list="months" /></td>
<td>
<input type="button" class="addButton" value="Add" />
<input type="button" value="Delete" onclick="deleteRow(this)">
</td>
</tr>
</table>
因此,总体问题是可能导致此行为的原因是什么?那么我该如何纠正或预防呢?由于我以前从未在我的任何其他 struts 项目中遇到过这个问题,所以我不确定从哪里开始,Google 也没有提供太多帮助。
编辑:
用于添加/删除行的 JavaScript(免责声明,它可能比我需要的更复杂,我在网站上找到它并且对此主题有点困惑):
<script type="text/javascript">
$(function addRow(){
$("#pricingInput").on('click', 'input.addButton', function() {
var $tr = $(this).closest('tr');
var allTrs = $tr.closest('table').find('tr');
var lastTr = allTrs[allTrs.length-1];
var $clone = $(lastTr).clone();
$clone.find('td').each(function(){
var el = $(this).find(':first-child');
var id = el.attr('id') || null;
if(id) {
i = id.substr(id.length-1);
var prefix = id.substr(0, (id.length-1));
var splitString = prefix.split("[");
prefix = splitString[0];
if(splitString[1] != null){
var splitStringAgain = splitString[1].split("");
prefix = prefix+(i+1)+splitStringAgain[1];
}
else
prefix = prefix+"[" + (i+1) + "]";
//el.attr('id', prefix);
//el.attr('name', '['+(i+1)+']');
prefix=undefined;
splitString=undefined;
}
});
$clone.find('input:text').val('');
$tr.closest('table').append($clone);
});
$("#pricingInput").on('change', 'select', function(){
var val = $(this).val();
$(this).closest('tr').find('input:text').val(val);
});
});
</script>
<script>
function deleteRow(r)
{
var i = r.parentNode.parentNode.rowIndex;
document.getElementById("pricingInput").deleteRow(i);
}
</script>
页面加载代码:
@SuppressWarnings("unchecked")
@Override
public String execute(){
months = new ArrayList<String>();
years = new ArrayList<String>();
months.add("01");
months.add("02");
months.add("03");
months.add("04");
months.add("05");
months.add("06");
months.add("07");
months.add("08");
months.add("09");
months.add("10");
months.add("11");
months.add("12");
years.add("2014");
years.add("2015");
years.add("2016");
years.add("2017");
years.add("2018");
years.add("2019");
years.add("2020");
utility_map.put("DUQ", rate_class_duq);
utility_map.put("Met_Ed", rate_clas_met_ed);
utility_map.put("Penn_Power", rate_class_pp);
utility_map.put("PPL", rate_class_ppl);
utility_map.put("Penelec", rate_class_penelec);
utility_map.put("Penn_Power", rate_class_pp);
utility_map.put("WPP", rate_class_wpp);
return SUCCESS;
}
表单提交代码:
@Override
public String execute() {
try{
nameList = Arrays.asList(nameHolder.split(","));
volumeList = Arrays.asList(volumeHolder.split(","));
for(int x = 0; x<nameList.size(); x++){
Pricing holder = new Pricing();
try{
if(nameList.get(x) != null && volumeList.get(x) != null){
if(volumeList.get(x).isEmpty() != true && nameList.get(x).isEmpty() != true){
holder.setName(nameList.get(x));
holder.setVolume(Double.valueOf(volumeList.get(x)));
pricing.add(holder);
}
}
}
catch(Exception e){
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter( writer );
e.printStackTrace( printWriter );
printWriter.flush();
String stackTrace = writer.toString();
System.out.print(stackTrace);
}
}
}
catch(Exception e ){
addActionError("An unknown error occured. Plase try reloading the page.");
return ERROR;
}
return SUCCESS;
}
最佳答案
看起来您添加到每个选择的 onChange 的事件处理程序可能是罪魁祸首:
$("#pricingInput").on('change', 'select', function(){
var val = $(this).val();
$(this).closest('tr').find('input:text').val(val);
});
当