2010-12-14 75 views
0

我在GridView中有一个复选框和一个文本框(对于每一行),我希望能够编写一些JavaScript来启用和禁用文本框,具体取决于复选框(选中或取消选中)。我想我必须以某种方式给JS提供索引。这可能吗?在GridViewRow中禁用/启用文本框

回答

0

感谢您的回复,我已经解决此问题的只是做了回发的工作 - 不是最好的方法,但由于时间的限制这是合乎逻辑的选择

1

如果你准备使用jquery那么这可以很容易地完成如下:

$(document).ready(function() { 

    $('.grid tr').each(function() { 
     var r = $(this); 
     var c = r.find('.check'); 
     var t = r.find('.text'); 
     var f = function(c1, t1) { return function() { 
      if (c1.attr('checked')) { 
       t1.removeAttr('disabled'); 
      } 
      else { 
       t1.attr('disabled', 'disabled'); 
      } 
     }; 
     }; 
     c.click(f(c, t)); // attach click event handler 
     f(c, t); // set initial state 
    }); 
}); 

上面的脚本是假设GridView的表饰有grid css类和每一个文本框和复选框与装饰分别为checktext css类。

+1

我要补充这一点的唯一一件事就是关闭在asp.net页面上查看状态验证。由于您正在修改页面中控件的状态,所以查看状态验证将会引发错误。这些错误是间歇性的,很难调试,但他们在那里。禁用视图状态验证可以防止这种情况发生,并使JavaScript有机会在客户端修改html控件,同时强制服务器端不要大惊小怪。 – bleepzter 2010-12-14 19:19:15

0


是的,这是绝对有可能的。

要实现这一点,你需要做到以下几点:

  1. 编写一个通用的JavaScript函数来处理基础上的复选框的状态的文本框的启用/禁用;
    实施例: -
    function ManageControlEnabling(sourceCheckBoxId, affectingControlId)
    {
    var sourceCheckBox = document.getElementById(sourceCheckBoxId);
    var affectingControl = document.getElementById(affectingControlId);
    var shouldEnable = false;

    if (sourceCheckBox && affectingControl)
    {
    shouldEnable = sourceCheckBox.checked;

    if(shouldEnable) 
        affectingControl.disabled = false; 
    else 
        affectingControl.disabled = true; 
    

    }
    }

  2. 处理的网格视图的行数据绑定事件。在.Net代码中实现类似的功能,以基于复选框的状态来处理启用/禁用文本框(针对每行)。并且将JavaScript功能添加到复选框;
    例子: -

    CheckBox checkSource; 
    TextBox textAffecting; 
    
    
    checkSource = e.Row.FindControl("cbSource") as CheckBox; 
    textAffecting = e.Row.FindControl("tbAffecting") as TextBox; 
    
    
    if(checkSource != null) 
    { 
        textAffecting.Enabled = checkSource.Checked; 
    } 
    
    
    checkSource.Attributes.Add("onclick", "ManageControlEnabling('" + checkSource.ClientID + "', '" + textAffecting.ClientID + "', true);"); 
    

请看看这有助于。

谢谢。

+0

感谢您的帮助:)可悲的是,它不起作用 - rowdatabound部分工作(它添加了属性,并且取决于复选框状态,文本框被禁用/启用),但是当我单击复选框时它从不启用文本框 - 即使我把所有的if都拿出来并且让它启用了文本框。 – Chris 2010-12-14 10:46:59