使用jQuery在转发器中查找文本框

时间:2014-02-03 15:22:29

标签: jquery html asp.net

我们遇到了在多行文本框中关闭最大长度很重要的情况。在各处搜索后,我们发现了许多客户端处理的解决方法示例。我们决定使用一个简单的jQuery扩展来处理它。这部分很容易,但试图在转发器中找到文本框是很困难的。我可以找到转发器,我尝试了以下jQuery更深入。

$(document).ready (function() {
    $("[id*=myRPT]").find("[id*=txtComment").maxlength    
    ({ max: 1000});
});

我也尝试过使用我在网上找到的.clientid语法,它永远找不到控件。实际上是否有一些秘密可以通过更改名称和在中继器中进行嵌套来控制控件?

2 个答案:

答案 0 :(得分:1)

继续我的评论,没有你的HTML,这是一个猜测,但尝试这样的事情:

$(document).ready (function() {
    $("[id*=myRPT]").find("[id*=txtComment]").attr('maxlength',1000);
});

您的选择器缺少结束方括号,您需要使用jQuery attr方法而不是DOM maxLength属性。

只要您生成的名称ID包含myRpttxtComment包含您正在使用的(* =)选择器就可以使用。

注意:如果您发布了该页面HTML输出的副本,那将会有很大帮助:)

一个更好的选择(如其他人所提到的)是在编辑框中添加一个特定的类,并将更改应用于使用类选择器的那些。

答案 1 :(得分:1)

Repeater中控件层次结构的性质确实很难找到ASP.NET控件中的文本框,特别是当父控件实现“覆盖”的INamingContainer接口时孩子控制的ID。但是,您可以使用一些技巧来处理这些令人生畏的任务。实际上,这些技巧可以很容易地解决在客户端找到控件的问题。

我想最简单的一个(因为你已经在使用jQuery)是在数据绑定时向文本框添加自定义数据属性,然后使用不显眼的javascript技术来查找特定的TextBox。您可以使用数据绑定表达式以声明方式添加这些属性...

<asp:TextBox ID="textBox1" runat="server" data-dataKey='<%# Eval("YourDataKey")'/>

请注意,data-dataKey将唯一标识TextBox ...确保您的数据密钥是唯一的。如果您与ItemDataBound控件的Repeater事件相交,您也可以从代码隐藏中强制执行...

protected void Reapeater1_ItemDataBound(object sender, RepeaterItemEventArgs args)
{
    if(args.ItemType == ListItemType.Item)
    {
        TextBox txt = args.Item.FindControl("textbox1") as TextBox;

        if(null != txt)
        {
            txt.Attributes.Add("data-dataKey", yourdatakey);
        }
    }
}

我跳过了一些复杂的问题,但希望你能得到这个想法。然后,在jQuery中,您可以通过其数据键属性选择特定的TextBox ...

function processTextBox(datakey){
    $("input[type=text][data-datakey=" + datakey + "]").maxlength    
    ({ max: 1000});
}

请注意,您需要知道数据密钥,但您可以定制解决方案以轻松满足此要求。如果您需要进一步澄清,请告诉我。

顺便说一句,如果您需要禁用所有文本框的最大长度,只需使用自定义数据属性“标记”这些文本框而不使用任何值,并使用jQuery查找文本框。 ..

$("input[type=text][data-textbox]")

甚至这个“可以”工作......

$("[data-textbox]")