GridView行的TemplateFields的JavaScript

时间:2010-11-24 11:46:50

标签: c# javascript asp.net

我正在创建一个程序,其中在每个GridView行中都有一个复选框和一个文本框,默认情况下分别取消选中和禁用。勾选复选框后,我需要触发一些JavaScript来启用该文本​​框,反之亦然,以便在未选中时使用。到目前为止,我这样做:

JS:

    <script type="text/javascript">
    function onholdev(index) {
        var chk = document.getElementById('<%=grdCons.Rows[index].FindControl("chkHold").ClientID %>');
        var txt = document.getElementById('<%=grdCons.Rows[index].FindControl("txtReason").ClientID %>');

        if (chk.checked == true) {
            txt.disabled = false;
        }
        else {
            txt.disabled = true;
            txt.value = "";
        }
    }
</script>

C#(RowDataBound事件)

            CheckBox chkHold = ((CheckBox)e.Row.FindControl("chkHold"));
        chkHold.Attributes.Add("onchange", "onholdev(" + e.Row.RowIndex + ")");

但在JS中,它表示'index'变量不存在,在函数的第一行(以var chk开头)。我这样做了吗?

3 个答案:

答案 0 :(得分:0)

问题是索引在字符串内部,而它应该是一个参数,这解决了它:

 var chk = document.getElementById('<%=grdCons.Rows[' + index + '].FindControl("chkHold").ClientID %>'); 

另一行也是如此

答案 1 :(得分:0)

由于复选框将呈现为输入,因此我们可以使用$('.check input')找到它,因为它是动态添加的,所以我们需要使用jquery bind将click函数添加到复选框。所以在这里我得到了chk = $('.check input');的检查控件。每次当用户选中复选框时,函数会调用。我在这里设置所有文本框的可见性,当用户点击它时会找到下一个使用.hde控制并移除课程$(this).parent().next().removeClass('hide');。因此,复选框旁边会显示文本框。

在您的情况下,我认为默认情况下您会创建文本框disabled=false

.hide is used to set visiblity false.you can do disabling by adding attribute disabled to the textbox

CSS

  .hide
        {
            display: none;
        }

设计师代码

<ItemTemplate>
<asp:CheckBox ID="cbEnergyItems" runat="server" CssClass="check" />
<input type="text" id="txtQty" style="width: 25px" class="hide"
  value="0" runat="server" />
    <%# Eval("something") %>                                                        
 </ItemTemplate>

Jquery的

  $('.check input').bind("click", function() {
                        var chk = $('.check input');
                        if ($(this).attr('checked')) {
                            //$(this).parent().next().removeClass('hide'); //removing the class to visible. you can do removing the attribute 
                              $(this).parent().next().removeAttr("disabled");
                            if ($(this).parent().next().val() == ""0"")
                                showStatus(true, "Please enter the quantity");
                        }
                        else {
                               $(this).parent().next("disabled","disabled").
                           // $(this).parent().next().addClass('hide');

                        }

                    });

我认为这可以解决您的问题。

答案 2 :(得分:-1)

感谢大家的帮助,我通过不在服务器端进行“解决”。有点懒,但节省了很多JS头痛。