基于ASP OnText事件的控制按钮控件

时间:2012-07-26 19:47:02

标签: asp.net telerik rad-controls

我要做的是根据已经插入文本框的字符数启用或禁用特定按钮。

当我点击文本框时,事件才会触发,也许我正在寻找别的东西?

<telerik:RadTextBox ID="InputVinInformationTextBox" runat="server"
    Skin="Office2010Blue"
    Width="250px"
    MaxLength="16"
    OnTextChanged="InputVinInformationTextBox_OnText"
    AutoPostBack="true">
</telerik:RadTextBox>

protected void InputVinInformationTextBox_OnText(object sender, EventArgs e)
{
    if (InputVinInformationTextBox.Text.Length >= 8)
    {
        VinSubmitButton.Enabled = true;
    }
    else
    {
        VinSubmitButton.Enabled = false;
    }
}

2 个答案:

答案 0 :(得分:0)

如果你不介意使用jQuery,你可以删除OnTextChanged函数,而是将功能绑定到keyup事件。您只需在<head>标记中添加以下内容:

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
    $(document).ready(function() {
        $("#<%=InputVinInformationTextBox.ClientID%>").keyup(function() {
            if (InputVinInformationTextBox.Text.Length >= 8)
            {
               VinSubmitButton.Enabled = true;    
            }
            else
            {
                VinSubmitButton.Enabled = false;
            }
        }
    });
</script>

我不确定你的VinSubmitButton是什么,但我认为,因为它在你的例子中工作,那是你已经存储的元素。

答案 1 :(得分:0)

此行为是设计使然:

  

所有RadInput控件都提供TextChanged服务器事件,即   当AutoPostBack属性设置为true时,用户输入   有效输入,输入失去焦点。

     

只有输入控件的值才会出现TextChanged事件   实际上是变化如果用户更改输入控件中的字符串   但实际上并没有改变值... TextChanged事件   没有发生。

有关详细信息,请参阅Telerik网站上的help topic

我建议您使用OnTextChanged事件,因为它只会在输入有效文本时触发,以更改RadTextBox的上一个值。

或者,您可以使用JavaScript来确定何时输入了适当数量的字符,然后手动触发请求。

<telerik:RadTextBox ID="InputVinInformationTextBox" runat="server"
    Skin="Office2010Blue"
    Width="250px"
    MaxLength="16"
    OnLoad="InputVinInformationTextBox_OnLoad">
    <ClientEvents OnKeyPress="InputVinInformationTextBox_OnKeyPress" />
</telerik:RadTextBox>


<script type="text/javascript">
    function InputVinInformationTextBox_OnKeyPress(sender, args) {
        var text = sender.get_value();
        if (text.length >= 8) {
            var ajaxManager = $find('<%= RadAjaxManager.GetCurrent(Page) %>');
            ajaxManager.ajaxRequestWithTarget(sender.get_id(), '');
        }
    }
</script>

上面的代码假设您还在页面上使用RadAjaxManager,并且已将其配置为在RadTextBox触发时更新页面的全部/部分内容。您需要在控件(或更高版本)的OnLoad事件期间检查RadTextBox值,以便为控件初始化所有ViewState和表单值。

protected void InputVinInformationTextBox_OnLoad(object sender, EventArgs e)
{
    if (InputVinInformationTextBox.Text.Length >= 8)
    {
        VinSubmitButton.Enabled = true;
    }
    else
    {
        VinSubmitButton.Enabled = false;
    }
}