如果使用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" />
最佳答案
我研究了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
通用...可能是您可以尝试使用“ .class”或“ input”查找输入。这取决于整体UI,因为您在问题中提到要在运行时将CssClass添加到Textbox。
我可以想到的另一种方法是进行反向操作,即获取具有水印类的所有输入,然后添加文本类。
<script type="text/javascript">
Sys.Application.add_load(appl_load); //register load handler
//load handler
function appl_load() {
$(".watermark").addClass("text");
}
</script>
关于asp.net - TextBoxWatermarkExtender WatermarkCssClass覆盖TextBox CssClass,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21755995/