我正在创建一个网格表,用户可以在其中添加应用程序或删除他们需要的应用程序。用于重置的应用程序需要选择是否从下拉列表中重置(登录,覆盖或登录并覆盖),除了重置类型之外,用户还应输入用户ID。
我的问题是,我的网格行是循环的,所以我的下拉列表有一个id和一个类,而我的userid的文本框也是如此。我可以使用document.getElementsByName将输入的文本保存在userid文本框中。但是,我无法在下拉列表中获取所有选定的值,我只获得第一行中下拉列表的值。
这是我的dropdownList代码:
public string GetResettingList()
{
StringBuilder html = new StringBuilder();
try
{
//select action
html.Append("<table style=\"width:24% !important;\">");
html.Append("<tr>");
html.Append("<td style=\"text-align:left;\"><select id=\"ddlreset\" style=\"width:150px;\" onchange=\"\"><option value=\"\">--Please Select--</option>");
var sAction = _DataEntryBLL.showResettingList();
foreach (var r in sAction)
{
html.Append("<option value=\"" + r.resetCode + "\">" + r.resetDesc.ToString() + "</option>");
}
html.Append("</table>");
}
catch (Exception ex)
{
html.Clear();
html.Append("Error found." + ex.Message);
}
return html.ToString();
}
这是我在ASP.NET中的代码:
try
{
ShowList = _DataEntryBLL.showBranchSingleRequest(position);
if (ShowList.Count() > 0)
{
foreach (var app in ShowList)
{
//content = "content=\"" + app.ApplicationID + ";" + app.ApplicationDesc + ";" + app.Applicationshortname + "\"";
html.Append("<tr>");
if (prevAppId != app.applicationid)
{
html.Append("<td width=\"5%\"><input type=\"checkbox\" name =\"chkapp\" class=\"check-app\" id = \"chkapp" + app.applicationid + "\" value=\"" + app.applicationid + "\">");
html.Append("<td colspan=\"1\" class=\"\" style=\"background-color:#EEE\"><b>" + app.applicationDesc.ToString() + "<input type=\"hidden\" id=\"hdnbranchappid\" value=\"" + app.applicationid + "\"></td>");
//html.Append("<td ></td><td ></td>");
html.Append("<td id=\"tdDdlreset\" class=\"reset-type\" style=\"background-color:#EEE\">" + GetResettingList() + "<input type=\"text\" id=\"hdnDdlresetvalue\"></td>");
html.Append("<td width=\"40%\" class=\"\" style=\"background-color:#EEE\"><input type=\"text\" id=\"UserAppID\"><input type=\"hidden\" id=\"hdnbranchprofid\" value=\"" + app.profileID + "\"></td></tr>");
}
html.Append("<tr><td ></td> <td ></td><td ></td>");
html.Append("</tr>");
prevAppId = app.applicationid;
}
}
else
{
html.Append("<tr>");
html.Append("<td colspan=\"3\" align=\"center\"> No Records found.</td>");
html.Append("</tr>");
}
html.Append("</table>");
html.Append("<div style=\"padding-top:1%;\"><input type=\"button\" class=\"btnDeleteApplication\" value=\"Delete Application/s \"> <input type=\"hidden\" id=\"\"></div>");
html.Append("</div>");
}
这是我在JS中的代码
function SaveResettingBranchRequest() {
var input = "";
var branchuserid = document.getElementsByName("UserAppID");
var branchApp = document.getElementsByName("hdnbranchappid");
//dropdown reset
var resetType = document.getElementById("ddlreset");
var reset = resetType.options[resetType.selectedIndex].value;
for (var i = 1; i < branchApp.length; i++) {
input += branchApp[i].value + ":" + branchuserid[i].value + ":" +reset[i].value + "|";
}
//Call ajax here...
}
如果我选择3个应用程序:
我应该得到以下内容:
network | sign on | P123405
as400 | override | 22089
Stock | sign on and override | 203412
但我得到的是第一行的价值,即网络应用。
请帮助我尝试了我在网上找到的所有内容,但它只获得了第一行。
已编辑.--我忘记了下拉列表。
谢谢,
答案 0 :(得分:0)
需要纠正的一些问题:
td
标记(带复选框)未关闭; b
中的td
标记未关闭; select
元素,您还应该使用 getElementsByName ,这在您完成上述更改后应该有效; select
元素的选定值,您只需使用其value属性;您无需转到选项集合; select
元素; 以下是HTML生成行的行,应该获得 name 属性而不是 id ;第一个来自 GetRessetingList :
html.Append("<td style=\"text-align:left;\"><select id=\"ddlreset\" style=\"width:150px;\" onchange=\"\"><option value=\"\">--Please Select--</option>");
html.Append("<td width=\"5%\"><input type=\"checkbox\" name =\"chkapp\" class=\"check-app\" id = \"chkapp" + app.applicationid + "\" value=\"" + app.applicationid + "\">");
html.Append("<td colspan=\"1\" class=\"\" style=\"background-color:#EEE\"><b>" + app.applicationDesc.ToString() + "<input type=\"hidden\" id=\"hdnbranchappid\" value=\"" + app.applicationid + "\"></td>");
//html.Append("<td ></td><td ></td>");
html.Append("<td id=\"tdDdlreset\" class=\"reset-type\" style=\"background-color:#EEE\">" + GetResettingList() + "<input type=\"text\" id=\"hdnDdlresetvalue\"></td>");
html.Append("<td width=\"40%\" class=\"\" style=\"background-color:#EEE\"><input type=\"text\" id=\"UserAppID\"><input type=\"hidden\" id=\"hdnbranchprofid\" value=\"" + app.profileID + "\"></td></tr>");
某些 id 属性值正常,因为它们包含应用程序ID,但更改其余部分如下:
html.Append("<td style=\"text-align:left;\"><select name=\"ddlresetName\" style=\"width:150px;\" onchange=\"\"><option value=\"\">--Please Select--</option>");
html.Append("<td width=\"5%\">" +
"<input type=\"checkbox\" name =\"chkapp\" class=\"check-app\"" +
"id = \"chkapp" + app.applicationid + "\" value=\"" +
app.applicationid + "\">");
html.Append("<td colspan=\"1\" class=\"\" style=\"background-color:#EEE\"><b>" +
app.applicationDesc.ToString() + "</b>" +
"<input type=\"hidden\" name=\"hdnbranchappName\" value=\"" +
app.applicationid + "\"></td>");
//html.Append("<td ></td><td ></td>");
html.Append("<td name=\"tdDdlreset\" class=\"reset-type\" style=\"background-color:#EEE\">" +
GetResettingList() +
"<input type=\"text\" name=\"hdnDdlresetvalueName\"></td>");
html.Append("<td width=\"40%\" class=\"\" style=\"background-color:#EEE\">" +
"<input type=\"text\" name=\"UserAppName\">" +
"<input type=\"hidden\" name=\"hdnbranchprofName\" value=\"" +
app.profileID + "\"></td></tr>");
完成这些更改后,此JavaScript代码应该会提供更好的结果:
function SaveResettingBranchRequest() {
var input = "";
var branchuserid = document.getElementsByName("UserAppName");
var branchApp = document.getElementsByName("hdnbranchappName");
//dropdown reset
var resetType = document.getElementByName("ddlresetName");
for (var i = 0; i < branchApp.length; i++) {
input += branchApp[i].value + ":" +
branchuserid[i].value + ":" +
resetType[i].value + "|";
}
//Call ajax here...
}
您最初提供的代码会发现 branchApp.length 为0(因为没有匹配名称的元素),因此它不会产生任何内容。我猜你通过尝试简化问题来进一步打破代码。
由于您必须将多个 id 属性更改为 name 属性,因此其他一些代码可能会中断。因此,您应检查对这些 id 属性的任何依赖关系,并相应地更改代码。 id 属性仅在您通过其 id 处理这些元素的JavaScript时才有用。在你提供的代码中没有这样的需求。