TextBoxWatermarkExtender WatermarkCssClass覆盖TextBox CssClass

时间:2014-02-13 13:44:17

标签: asp.net css ajaxcontroltoolkit watermark

如果在具有CssClass属性的TextBox控件上设置CSS类,则使用具有WatermarkCssClass属性的TextBoxWatermarkExtender定位该TextBox将导致其丢失其CSS类,即,它将class属性重置为水印文本,而不是将其作为附加类添加:

<asp:TextBox ID="TextBox1" runat="server" CssClass="text" />
<ajax:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender1" runat="server" TargetControlID="TextBox1" WatermarkCssClass="watermark" />

作为输出

<input type="text" class="text" />

变为

<input type="text" class="watermark" />

当水印样式生效而不是

<input type="text" class="text watermark" />

有人可以建议解决方法吗?

请不要在解决方法下面建议,因为我需要添加TextBox CssClass运行时。我已经通过javascript添加了TextBox CssClass,但仍然TextBoxWatermarkExtender WatermarkCssClass覆盖了文本框类。

设置WatermarkCssClass属性以包含两个类:

<asp:TextBox ID="TextBox1" runat="server" CssClass="text" />
<ajax:TextBoxWatermarkExtender ID="TextBoxWatermarkExtender1" runat="server" TargetControlID="TextBox1" WatermarkCssClass="text watermark" />

1 个答案:

答案 0 :(得分:0)

我查看了asp.net ajax发出的JS,以及创建WaterMarkExtender的方法。

Sys.Application.add_init(function() {
$create(Sys.Extended.UI.TextBoxWatermarkBehavior, {"ClientStateFieldID":"TextBoxWatermarkExtender1_ClientState","WatermarkCssClass":"watermark","WatermarkText":"Hello","id":"TextBoxWatermarkExtender1"}, null, null, $get("TextBox1"));
})

所以我认为你可以在应用程序初始化事件之后修改tb的类。

<script type="text/javascript">
     Sys.Application.add_load(appl_load); //register load handler
     //load handler
     function appl_load() {
            $("#TextBox1").addClass("text");
     }
</script>

参考:ASP.NET Ajax life cycle

Generic ...您可以尝试使用“.class”或“input”查找输入。它取决于整体UI,因为您在问题中提到在运行时将CssClass添加到文本框中。 我能想到的另一种方法是反向操作,即获取具有水印类的所有输入,然后添加文本类。

 <script type="text/javascript">
         Sys.Application.add_load(appl_load); //register load handler
         //load handler
         function appl_load() {
                $(".watermark").addClass("text");
         }
    </script>