对于第一个问题,尝试用js的cloneNode,但发现一个问题,页面的任何一个autopostback都会把之前添加的行删除,有无办法做到部分刷新?
对于第二个问题,表格中有个按钮,在页面的某些状态下该按钮必须置为无效状态,如果是input的HTML控件,如何控制它的readonly?如果换为asp:button则每次点击后都会出现上面第一个问题,即新增的表格行被删除。
已经折腾两天了,求帮忙>_<
对于第二个问题,表格中有个按钮,在页面的某些状态下该按钮必须置为无效状态,如果是input的HTML控件,如何控制它的readonly?如果换为asp:button则每次点击后都会出现上面第一个问题,即新增的表格行被删除。
已经折腾两天了,求帮忙>_<
tr = document.createElement('tr'),
td = document.createElement('td');
table.cellPadding = 0, table.cellSpacing = 1, table.border = 1;
td.width = 80, td.height = 24;
for (i = 0; i < _td; i++) {
tr.appendChild(td.cloneNode(true));
}
for (i = 0; i < _tr; i++) {
table.appendChild(tr.cloneNode(true));
}
document.body.appendChild(table);将新增的 标签 的name 赋给已知的标签
例如 hidden.value
通过HIdden,request.form取值
js我参考之前csdn的脚本写了一段……
<table id="tb" border="1" width="400">
<tr>
<td></td><td></td><td></td>
</tr>
</table> 点Button加一行,如下:
<input id="Button1" type="button" value="button" onclick="addline(1,0)" /> 加一个隐藏域用来记录添加的行数,用于回发恢复
<input id="Hidden1" type="hidden" runat="server" />
js:
<script type="text/javascript">
function addline(trCount,flag) {
var tb=document.getElementById("tb");
var tr = document.createElement("tr");
var td = document.createElement("td");
td.height = 20;
for (i = 0; i < 3; i++) {
tr.appendChild(td.cloneNode(true));
}
for (i = 0; i < trCount; i++) {
tb.appendChild(tr.cloneNode(true));
} if (flag == 0) {
if (document.getElementById("Hidden1").value == "")
document.getElementById("Hidden1").value = "1";
else
document.getElementById("Hidden1").value = parseInt(document.getElementById("Hidden1").value) + 1;
}
}
</script>
c#
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "addline(" + Hidden1.Value + ",1)", true);
}
至于表格中有个按钮处理道理是一样的
Table table1 = new Table();
TableRow r = new TableRow();
TableCell c = new TableCell(); r.Cells.Add(c);
table1.Rows.Add(r);
function addRetValid(bValid)
{
var allInputs = document.getElementById("RetMsisdnTab").getElementsByTagName("input");
alert(allInputs.length);
for (var i = 0; i < allInputs.length; i++)
{
if (bValid)
{
allInputs[i].ReadOnly = false;
}
else
{
allInputs[i].ReadOnly = true;
}
}
}<table id="RetMsisdnTab" cellpadding="0" cellspacing="1" border="0" width="320" bgcolor="#CCCC99">
<tr class="input">
<td class="style6"><asp:TextBox ID="RetMsisdnTextBox" runat="server"></asp:TextBox></td>
<td><asp:TextBox ID="RetPercentTextBox" runat="server" Width="50px"></asp:TextBox>
<asp:Label ID="PerLabel" runat="server" Text="%"></asp:Label></td>
<td style="width:52px"><input type="button" value="添 加" class="btn" onClick="insRow()" /></td>
</tr>
</table>
然后在PageLoad中添加下面这句(m_bAddRet=false):
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "addRetValid(" + m_bAddRet.ToString() + ")", true);试了下,刚进入页面的时候,那个按钮依然有效>_<
P.S:这个JS函数我放在了body里了>_<
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "addRetValid('" + m_bAddRet + "')", true);js接受判断,由于是字符串了,所以
if (bValid)
应改为
if (bValid=="True")
function addRetValid(bValid)
{
var allInputs = document.getElementById("RetMsisdnTab").getElementsByTagName("input");
alert(allInputs.length);
for (var i = 0; i < allInputs.length; i++)
{
if (bValid == "true" && allInputs[i].type == "button")
{
allInputs[i].ReadOnly = false;
}
else if (bValid == "false" && allInputs[i].type == "button")
{
allInputs[i].ReadOnly = true;
}
}
}
传递为True
所以应为bValid == "True"
{
var allInputs = document.getElementById("RetMsisdnTab").getElementsByTagName("input");
alert(allInputs.length + "," + bValid);
for (var i = 0; i < allInputs.length; i++)
{
alert(allInputs[i].type);
if (bValid == "True" && allInputs[i].type == "button")
{
allInputs[i].Disabled = "";
}
else if (bValid == "False" && allInputs[i].type == "button")
{
allInputs[i].Disabled = "disabled";
alert(allInputs[i].Disabled);
}
}
}
显示出来的确是disabled,不过似乎依然无效……不理解其中的道理真成问题啊……
大写改成小写
allInputs[i].disabled
<head runat="server">
<title>无标题页</title> <script language="javascript" type="text/javascript"> //使用clone方式来生成一行,targetTable是需要添加行的table的ID,sourceTable是clone对象 //talbe的ID,即复制sourceTable的第一行插入到targetTable中,完成增加行的操作 function insertRow(targetTable,sourceTable) { var oTBODY = document.getElementById(targetTable).tBodies.item(0); var oTBODYData = document.getElementById(sourceTable).tBodies.item(0); var rowsCount = oTBODYData.rows.length; for(var i=0;i<rowsCount;i++){ oTBODY.appendChild(oTBODYData.rows[i].cloneNode(true)); } } function deleteRow(Field,targetTable){ var findex = getElementOrder(Field)-1;//此处减1是因sourceTable中有一行是隐藏的 document.getElementById(targetTable).deleteRow(findex); } // 查询出将要删除的行所在的位置index function getElementOrder(field){ var i = 0; var order = 0; var elements = document.getElementsByName(field.name); for(i=0;i<elements.length;i++){ order++; if(elements[i]==field){ break; } } return order; } </script></head>
<body>
<form id="form1" runat="server">
<div>
<table id="sourceTable" style="display: none;">
<tr>
<td>
<input type="text" name="username">
</td>
<td>
<input type="password" name="password">
</td>
<td>
<input type="text" name="age">
</td>
<td>
<input type="button" name="deleteButton" value="删除" onclick="deleteRow(this,'targetTable')">
</td>
</tr>
</table>
<table id="targetTable">
<tr>
<td>
用户名
</td>
<td>
密码
</td>
<td>
年龄
</td>
<td>
</td>
</tr>
<tfoot>
<tr>
<td colspan="4" align="right">
<input type="button" value="增加行" onclick="insertRow('targetTable','sourceTable');">
</td>
</tr>
</tfoot>
</table>
</div>
</form>
</body>
</html>
{
Response.Write("<script language='javascript'>alert('PageLoad" + m_bAddRet.ToString() + "');</script>");
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "addRetValid(\"" + m_bAddRet.ToString() + "\")", true);
}protected void TypeDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
//ReFillProgDropList(TypeDropDownList, ProgDropDownList);
m_bAddRet = true;
Response.Write("<script language='javascript'>alert('SelectChange" + m_bAddRet.ToString() + "');</script>");
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "addRetValid(\"" + m_bAddRet.ToString() + "\")", true);
}
function addRetValid(bValid)
{
var allInputs = document.getElementById("RetMsisdnTab").getElementsByTagName("input");
alert(bValid);
for (var i = 0; i < allInputs.length; i++)
{
if (bValid == "True" && allInputs[i].type == "button")
{
allInputs[i].disabled = "";
}
else if (bValid == "False" && allInputs[i].type == "button")
{
allInputs[i].disabled = "disabled";
}
}
}在下拉框更改后,alert的顺序是PageLoadFalse;SelectChangeTrue;False;
不理解为什么传给addRetValid的是False而不是True
ClientScript.RegisterStartupScript(ClientScript.GetType(), "", "addRetValid(\"" + m_bAddRet.ToString() + "\")", true);
但还是不知道为什么>_<