0

我有一个文本框,其中包含用户可以指定查看某些内容的时间值。只有以 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 中的时间,但用户仍然可以手动编辑文本。

我试图通过设置来阻止用户直接编辑 TextBox ReadOnly = "true"。但是,这导致我的滑块也无法编辑 TextBox。

有没有办法阻止用户编辑 TextBox 但让代码仍然编辑它?

4

3 回答 3

3

TextBox.ReadOnly属性不同于 HTMLreadonly属性。前者忽略客户端所做的任何更改。后者阻止用户更改输入,但允许脚本这样做。

在服务器端试试这个:

TimeSelect.Attributes["readonly"] = "readonly";

或者在客户端:

$("#TimeSelect").prop("readonly", "readonly");

当然,这些都不能完全阻止用户更改文本框。您可以使用检查器编辑属性,甚至可以在请求发出修改值之前捕获请求。确保验证服务器端的值。

于 2013-07-26T20:28:56.897 回答
1

这是一个类似的问题here

我更喜欢这个:

<asp:textbox id="txt1" onfocus="blur()" runat="server"/>

而不是OnKeyPress="false"因为如果用户试图复制和粘贴一些文本,它的行为就不像我们想要的那样。

于 2013-08-17T21:04:47.343 回答
1

尝试禁用聚焦文本框的能力。

$("#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;}
于 2013-07-26T20:23:48.227 回答