选定的gridview行不会更改,而是所有行都在更改

时间:2013-10-10 07:56:47

标签: javascript jquery asp.net

我有一个包含复选框和文本框的gridview。我想要的是当选中特定行的复选框时,行的文本框将变为下拉列表。 我使用了.show().hide()功能来显示下拉列表和隐藏文本框。

这是gridview的复选框:

     <ItemTemplate>      <div style="text-align: center;">
           <asp:HiddenField ID="hdn_id2" runat="server" Value='<%#Eval("Id") %>' />

                    <asp:CheckBox ID="NewCheckBoxImage" CssClass="NewCheckBoxImage()"  onClick="NewCheckBoxImage();" runat="server" /></div>
                </ItemTemplate>

这是javascript的代码:

   function NewCheckBoxImage() {

        var flag = false;

        $('.gridAssigned input[type="checkbox"]').each(function () {


            if ($(this).is(':checked')) {
                flag = true;
            }
        });
        if (flag) {

            $('.NewBtnAssign').show();
            $('.TextBoxCompany').hide();
            $('.TextBoxBrand').hide();
            $('.DDCompany').show();
            $('.DDBrand').show();

        }
        else {
            $('.NewBtnAssign').hide();
            $('.TextBoxCompany').show();
            $('.TextBoxBrand').show();
            $('.DDCompany').hide();
            $('.DDBrand').hide();
        }
    }

TextBoxCompany,TextBoxBrand是文本框和DDCompany,DDBrand是下拉列表。选中任何复选框后,将隐藏所有文本框并显示所有下拉列表。我想要选中复选框的行,只显示那些行的下拉列表。

2 个答案:

答案 0 :(得分:3)

您正在按类选择元素,这将返回的不仅仅是当前行的元素。尝试以下功能:

   function NewCheckBoxImage() {
        $('.gridAssigned input[type="checkbox"]').each(function () {
            //Find the current row
            var row = $(this).parent().parent();

            if ($(this).is(':checked')) {
                //Checkbox is Checked

                $(row).find('.NewBtnAssign').show();
                $(row).find('.TextBoxCompany').hide();
                $(row).find('.TextBoxBrand').hide();
                $(row).find('.DDCompany').show();
                $(row).find('.DDBrand').show();
            } else {
                $(row).find('.NewBtnAssign').hide();
                $(row).find('.TextBoxCompany').show();
                $(row).find('.TextBoxBrand').show();
                $(row).find('.DDCompany').hide();
                $(row).find('.DDBrand').hide();
            }
        });
    }

这样做的每次点击一个复选框都会对项目列表进行检查并检查是否已选中。如果项目被选中,它将使用$(this).parent().parent();获取当前的HTML行,然后它将使用该行来查找该行中存在的所需元素并相应地显示/隐藏它们。

答案 1 :(得分:0)

你可以尝试一下让我知道吗?我不确定它是否有用,但可能

function NewCheckBoxImage() {

$('.gridAssigned input[type="checkbox"]').each(function () {
    var tr = $(this).closest('tr');
    if ($(this).is(':checked')) {
        tr.find('.NewBtnAssign').show();
        tr.find('.TextBoxCompany').hide();
        tr.find('.TextBoxBrand').hide();
        tr.find('.DDCompany').show();
        tr.find('.DDBrand').show();
    }
    else {
        tr.find('.NewBtnAssign').hide();
        tr.find('.TextBoxCompany').show();
        tr.find('.TextBoxBrand').show();
        tr.find('.DDCompany').hide();
        tr.find('.DDBrand').hide();
    }
    });

}