如何防止用户直接编辑asp:TextBox
本文关键字:asp TextBox 编辑 何防止 用户 | 更新日期: 2023-09-27 18:25:17
我有一个TextBox,它保存一个时间值,用户可以指定该时间值来查看某些内容。只有以0或5结尾的时间才有效,所以我使用Jquery滑块让用户选择他们想看的时间。
这是我的文本框:
<asp:TextBox ID="TimeSelect" runat="server" BorderWidth="2px" Text="" ReadOnly="false"></asp:TextBox>
下面是编辑它的代码(这是由滑块的"更改"回调调用的):
function OnSelectedSliceChanged(value) {
var now = new Date();
var currentTime = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
currentTime.setMinutes(currentTime.getMinutes() - currentTime.getMinutes() % 5);
currentTime.setMilliseconds(0);
currentTime.setSeconds(0);
var millisecondsToSubtract = (<%=ViewState[MaxTicks]%> -value) * oneInterval;
var newTime = new Date(currentTime.getTime() - millisecondsToSubtract);
$("#TimeSelect").attr("value", Pad("" + newTime.getHours(), 2) + ":" + Pad("" + newTime.getMinutes(), 2));
}
现在,滑块成功地更改了TextBox中的时间,但用户仍然可以手动编辑文本。
我试图通过设置ReadOnly = "true"
来阻止用户直接编辑TextBox。然而,这导致我的滑块也无法编辑TextBox。
有没有一种方法可以防止用户编辑TextBox,但仍让代码编辑它?
TextBox.ReadOnly
属性与HTML readonly
属性不同。前者忽略客户端所做的任何更改。后者阻止用户更改输入,但允许脚本更改
在服务器端试试这个:
TimeSelect.Attributes["readonly"] = "readonly";
或者客户端:
$("#TimeSelect").prop("readonly", "readonly");
当然,这两种方法都不能完全阻止用户更改文本框。您可以使用检查器编辑属性,甚至可以在请求发出之前捕获请求并修改值。请确保在服务器端验证这些值。
尝试禁用聚焦文本框的功能。
$("#TimeSelect").prop("disabled", true);
编辑
若要防止输入变灰,或应用新样式,请使用CssClass属性添加一个或多个类。
<asp:TextBox ID="TimeSelect" runat="server" CssClass="time-textbox" BorderWidth="2px" Text="" ReadOnly="false"></asp:TextBox>
然后相应地设计课堂风格。。。
.time-textbox {background-color:white !important;}
这里有一个类似的问题
我更喜欢这个:
<asp:textbox id="txt1" onfocus="blur()" runat="server"/>
而不是OnKeyPress="false"
,因为如果用户试图复制和粘贴某些文本,它的行为不会像我们想要的那样。