我有一个由Ajax Control Toolkit日历扩展的文本框。
我想这样做,以便用户无法编辑文本框,而是必须使用日历扩展程序进行输入。
我设法阻止除退格之外的所有键!
这是我到目前为止所做的:
<asp:TextBox ID="TextBox1" runat="server" onKeyPress="javascript: return false;" onKeyDown="javascript: return false;" onPaste="javascript: return false;" />
如何使用javascript在文本框中禁用退格键?
修改
因为我需要javascript中的解决方案而进行了编辑。
修改
事实证明,onKeyDown =“javascript:return false;”做的工作。我不知道它为什么以前没有工作。我尝试使用新的文本框,它可以很好地阻止退格。很抱歉每个发布答案的人都希望得到一些代表。在我标记为赏金之后。
我的文本框现在(似乎)阻止所有击键,并且仍然可以使用日历扩展器。
答案 0 :(得分:36)
ZX12R很接近。这是正确的解决方案:
TextBox是这样的:
<asp:TextBox ID="TextBox1" runat="server" onKeyDown="preventBackspace();"></asp:TextBox>
,脚本如下所示:
<script type="text/javascript">
function preventBackspace(e) {
var evt = e || window.event;
if (evt) {
var keyCode = evt.charCode || evt.keyCode;
if (keyCode === 8) {
if (evt.preventDefault) {
evt.preventDefault();
} else {
evt.returnValue = false;
}
}
}
}
</script>
首先,退格键不会通过Key Press进行,因此您必须使用Key Down。
答案 1 :(得分:8)
您不能只使用HTML readonly="readonly"
属性吗?
<input type="text" name="country" value="Norway" readonly="readonly" />
<textarea rows="3" cols="25" readonly="readonly">
It should work! :)
</textarea>
答案 2 :(得分:4)
如何使用显示标签和隐藏文本框将值返回服务器?
答案 3 :(得分:2)
您需要仅在客户端控制器上应用readonly,以便asp.net不会看到它并仍然在回发时读取数据。你可以用几种方法做到这一点,如果你使用jQuery就更容易将一个类添加到文本框中,例如。问题cssclass="readonly"
和$(".readonly").attr("readonly", true);
。
答案 4 :(得分:1)
正如其他人所说,ReadOnly =“True”将打破回发机制。
我相信您可以通过在PageLoad期间直接访问Request对象来解决代码问题:
//assuming your textbox ID is 'txtDate'
if(Page.IsPostBack)
{
this.txtDate.Text = Request[this.txtDate.UniqueID];
}
您的另一个选择是允许禁用控件在表单上回发,但这有点安全,因为通过脚本修改的只读字段可能会回来:
<form id="MyForm" runat="server" SubmitDisabledControls="True">
..
</form>
我不确定此属性对ReadOnly(vs Enabled =“False”)控件的影响,但值得尝试。
最后 - 我确实碰到了几年前你遇到的同一个问题,而且从我记忆中看,使用标记为readonly的html输入和runat =“server”以及实际的服务器端之间存在差异控制ReadOnly =“true”。
我有一种感觉:
<input type="text" readonly="readonly" runat="server" id="myTextBox" />
可能仍然允许数据通过,但在代码隐藏中,您必须将控件视为HtmlInputText或HtmlGenericControl与TextBox。您仍然可以访问所需的属性。
无论如何只是一些想法......
答案 5 :(得分:0)
这是一个可能的解决方案......添加一个事件监听器......
<asp:TextBox ID="TextBox1" runat="server" onKeyPress="KeyCheck;" />
然后功能就像这样..
function KeyCheck(e) {
var KeyID = (window.event) ? event.keyCode : e.keyCode;
if (KeyID == 8 ) {
alert('no backspaces!!);
}
}
怀疑它是否必须是onkeypress或onkeyup ...
答案 6 :(得分:0)
ReadOnly属性没有帮助。即使您的文本框是只读的,退格仍然会使您的浏览器返回页面。
答案 7 :(得分:0)
使用常规文本框不是只读而不是禁用,只需使用客户端JavaScript忽略按键。 这将忽略所有按键,因此您将具有READONLY行为,并且它也将忽略退格。
<input type="text" value="Your Text Here" onkeydown="return false;" />
答案 8 :(得分:0)
无需调用任何功能,只需尝试此操作:
<asp:TextBox runat="server" ID="txt" onkeydown="return false;"
onpaste = "return false;" onkeypress="return false;" />
答案 9 :(得分:0)
我能够用Jquery做类似的事情。把它放在这里作为参考!
$("#inputID").keypress(function (e)
{e.preventDefault();});
$("#inputID").keydown(function (e)
{e.preventDefault();});
第一个可以防止按键,而第二个可以防止按键事件。
仍然是一个JS菜鸟,所以请随意指出好/坏的事情。