一个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" Enabled='<%# FZRIsEdit %>' 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代码:
//日期格式化函数
        Date.prototype.format = function(format) {
            var o = {
                "M+": this.getMonth() + 1, //month   
                "d+": this.getDate(),    //day   
                "h+": this.getHours(),   //hour   
                "m+": this.getMinutes(), //minute   
                "s+": this.getSeconds(), //second   
                "q+": Math.floor((this.getMonth() + 3) / 3), //quarter   
                "S": this.getMilliseconds() //millisecond   
            }
            if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
     (this.getFullYear() + "").substr(4 - RegExp.$1.length));
            for (var k in o) if (new RegExp("(" + k + ")").test(format))
                format = format.replace(RegExp.$1,
       RegExp.$1.length == 1 ? o[k] :
         ("00" + o[k]).substr(("" + o[k]).length));
            return format;
        }
        function CreatWCRQ() {            var gvw = document.getElementById('<%=GridView1.ClientID %>');
            var rows = gvw.rows.length;            var thedate = (new Date()).format("yyyy-MM-dd");            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.   

    直接用MS的ScriptManager不是很好吗?也是局部刷新,没有必要写JS
      

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

  3.   


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

  4.   

    不 用GridView了,用Ajax,自己写格式成了