一个gridview中有一个dropdownlist(是否完成:有两个值是和否),当值发生变化时gridview中另一个文本框(完成时间)生成完成时间,或清空。原来是使用AutoPostBack,今天觉得总刷新太麻烦,就是用js写了一段代码,经过调试在IE中正常,但是在firefox 和chrome 不起作用(dropdownlist改变是否完成的值)文本框没变化。请高手赐教。
前台代码:<asp:TemplateField HeaderText="是否解决" SortExpression="是否解决"><ItemStyle width="90px" />
<EditItemTemplate>
<asp:DropDownList ID="DropDownList4" runat="server" DataSourceID="SqlDataSource3"
DataTextField="YesORNo" DataValueField="YesORNo" SelectedValue='<%# Bind("是否解决") %>' AutoPostBack="False"
onchange="CreatWCRQ()">
</asp:DropDownList><asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:xxzxProblemConnectionString %>"
SelectCommand="SELECT * FROM [YesORNo]"></asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label13" runat="server" Text='<%# Eval("是否解决") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField><asp:TemplateField HeaderText="解决时间" SortExpression="解决时间" ><ItemStyle width="100px" />
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("解决时间", "{0:yyyy-MM-dd}") %>' onclick="WdatePicker({readOnly:true})"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("解决时间", "{0:yyyy-MM-dd}") %>' Height="19px" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
js代码
function CreatWCRQ() { var gvw = document.getElementById('<%=GridView1.ClientID %>');
var rows = gvw.rows.length; var thedate = "2011-11-11"; for (i = 0; i < rows; i++) {
if (gvw.rows[i].cells[12].childNodes[0].value == "是" || gvw.rows[i].cells[12].childNodes[0].value == "否")
{ if (gvw.rows[i].cells[12].childNodes[0].value == "是") {
gvw.rows[i].cells[15].childNodes[0].value = thedate;
break; }
else {
gvw.rows[i].cells[15].childNodes[0].value = "";
break;
}
}
}
}
前台代码:<asp:TemplateField HeaderText="是否解决" SortExpression="是否解决"><ItemStyle width="90px" />
<EditItemTemplate>
<asp:DropDownList ID="DropDownList4" runat="server" DataSourceID="SqlDataSource3"
DataTextField="YesORNo" DataValueField="YesORNo" SelectedValue='<%# Bind("是否解决") %>' AutoPostBack="False"
onchange="CreatWCRQ()">
</asp:DropDownList><asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:xxzxProblemConnectionString %>"
SelectCommand="SELECT * FROM [YesORNo]"></asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label13" runat="server" Text='<%# Eval("是否解决") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField><asp:TemplateField HeaderText="解决时间" SortExpression="解决时间" ><ItemStyle width="100px" />
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("解决时间", "{0:yyyy-MM-dd}") %>' onclick="WdatePicker({readOnly:true})"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Eval("解决时间", "{0:yyyy-MM-dd}") %>' Height="19px" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
js代码
function CreatWCRQ() { var gvw = document.getElementById('<%=GridView1.ClientID %>');
var rows = gvw.rows.length; var thedate = "2011-11-11"; for (i = 0; i < rows; i++) {
if (gvw.rows[i].cells[12].childNodes[0].value == "是" || gvw.rows[i].cells[12].childNodes[0].value == "否")
{ if (gvw.rows[i].cells[12].childNodes[0].value == "是") {
gvw.rows[i].cells[15].childNodes[0].value = thedate;
break; }
else {
gvw.rows[i].cells[15].childNodes[0].value = "";
break;
}
}
}
}
谢谢,通过楼上指点,发现了原因,自己更改了代码: function CreatWCRQ() {
var gvw = document.getElementById('<%=GridView1.ClientID %>');
var rows = gvw.rows.length;
var thedate = "2011-11-11
var flag = "0"; for (i = 1; i < rows; i++) {
if (flag == "0") {
//此层循环式为了解决firefox、chrome等浏览器兼容性问题
for (j = 0; j < gvw.rows[i].cells[12].childNodes[j].length; j++) {
if (gvw.rows[i].cells[12].childNodes[j].value == "是") {
gvw.rows[i].cells[15].childNodes[j].value = thedate;
flag = 1;
break;
}
if (gvw.rows[i].cells[12].childNodes[j].value == "否") {
gvw.rows[i].cells[15].childNodes[j].value = "";
flag = 1;
break;
}
}
}
else {
break;
}
}
}