一个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;
                    }
                }
            } 
        }

解决方案 »

  1.   

    childNodes在FF下是把空白节点考虑进去的~所以你要递归去除空白节点
      

  2.   


    谢谢,通过楼上指点,发现了原因,自己更改了代码: 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;
                    }
                }
            }