如何使用Javascript使文本框只读
我得到了一个在asp中创建的旧项目,我需要将其中一个文本框设置为只读(因为它由下拉框填充,不允许任何自由文本输入)。这将被剪切并干燥以设置ReadOnly=“True”的属性。除了keppress上似乎有某种js函数阻止只读属性工作之外。我在JS方面几乎没有经验和知识,所以我不知道如何解决——什么应该是一个简单的改变 我曾尝试在html中将ReadOnly属性添加到True,但发生了一些奇怪的事情。当用户在框中键入时,文本将显示在框中,但无法删除。所以,这告诉我它部分起作用了,但还有一些事情在发生 然后我从实际的页面视图(在浏览器中)查看了源代码,在那里我看到了kepress事件被触发。(onkeypress=“返回控件(此事件);”)。因为我的ascx文件上没有显示 简言之。ReadOnly属性失败,因为onkeypress正在触发。(a) 我不完全理解JS在做什么,也不完全理解如何使这个框成为只读的 这是.ascx文件中文本框的代码如何使用Javascript使文本框只读,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我得到了一个在asp中创建的旧项目,我需要将其中一个文本框设置为只读(因为它由下拉框填充,不允许任何自由文本输入)。这将被剪切并干燥以设置ReadOnly=“True”的属性。除了keppress上似乎有某种js函数阻止只读属性工作之外。我在JS方面几乎没有经验和知识,所以我不知道如何解决——什么应该是一个简单的改变 我曾尝试在html中将ReadOnly属性添加到True,但发生了一些奇怪的事情。当用户在框中键入时,文本将显示在框中,但无法删除。所以,这告诉我它部分起作用了,但还有一些事情在发
<span class="ComposeHeaderValue">
<asp:TextBox runat="server" ID="ToTextBox" TabIndex="1" ReadOnly="true" />
</span>
我不知道这段代码里发生了什么。我试图在JSRY中添加属性更改。但那没用。这就是我所尝试的:
RY: function Rockliffe_MailSite_Web_UI_Client_ComposeControl_ComposeControl$RY(lV, nd) {
this.lR('ComposeControl', 'RY', lV.id + ',' + nd);
if (!this.na) {
return true;
}
return this.pg.Cu(lV, nd);
document.getElementById('ToTextBox').readOnly = true;
},
如果我找不到使文本框只读的方法。由于按键事件,如何禁用按键事件的发生?理论上,如果文本框是只读的,就永远不会有按键事件
使用Archer提供的解决方案。这是我更新的代码,仍然不能正常工作
<div class="ComposeHeaderLine">
<WebUtils:IconButton runat="server" id="ToComposeButton" style="float:left"/>
<span class="ComposeHeaderValue">
<asp:TextBox runat="server" ID="ToTextBox" TabIndex="1" ReadOnly ="true" />
</span>
</div>
在页面的最底部,我添加了以下内容
<script type="text/javascript">
function onKeyPress(textbox, event) {
textbox.value += event.key;
}
document.getElementById("ToTextBox").removeAttribute("onkeypress");
</script>
按键功能(文本框、事件){
textbox.value+=event.key;
}
document.getElementById(“ToTextBox”).removeAttribute(“onkeypress”);
不确定我是否正确配置了JS
新编辑 好吧,那么。在我的asp代码中,文本框没有任何onkeypress事件。但是,当我在web浏览器上查看源代码时,它确实会显示onkeypress事件。我想知道这有什么关系
"return TheControl.RY(this, event);"
<input name="TheControl$ToTextBox" type="text" readonly="readonly" id="TheControl_ToTextBox" tabindex="1" onkeypress="return TheControl.RY(this, event);" />
“返回control.RY(此事件);”
我有两个问题。使用Archer提供的示例
如果无法删除或退格,则听起来确实像是按键处理程序正在更新值,但忽略了
readonly
属性。如果readonly属性存在,我不希望光标闪烁,但我不知道第三方代码在做什么
但是,您可以删除可能与某些第三方代码冲突或不冲突的按键处理程序。这是最简单可行的解决方案,它不需要拆开别人的图书馆
下面是两个文本框的示例,我使用Javascript从其中一个文本框中删除了按键处理程序
按键功能(文本框、事件){
textbox.value+=event.key;
}
//从textbox2中删除事件处理程序
document.getElementById(“textbox2”).removeAttribute(“onkeypress”)代码>
您尝试禁用了吗?仅供参考,您的文档.getElementById('ToTextBox')。readOnly=true
永远不会执行,因为它出现在return
语句之后。@WilliamBright-我还没有尝试禁用,因为我已经读到,如果表单将数据保存到表中,禁用的将不会携带文本框的值?是这样吗?@WilliamBright和ExecChef:不能使用禁用的
,好像提交时该值永远不会发送到服务器。显然,应该使用下拉框来设置它。@LGSon-我试图在返回之前将语句上移,但没有成功。这让我思考。我看到的是正确的js代码吗?我还添加了一个警报——按键时也不会触发。我迷路了。“onkeypress=“return TheControl.RY(this,event)”我看到的是正确的js代码吗..RY?Archer-我做了更改..但有些地方不正确。没有任何更改。我可能没有正确配置js代码?我更新了我的原始问题,以显示我是如何实现您的代码的(很可能是错误的)不要添加onKeyPress()
函数-这只是为了演示之前和之后的操作。只需在有关删除处理程序的注释下方添加1行即可。如果仍然没有任何更改,则这是由于第三方代码,因此几乎没有人可以提供帮助。您能否不删除任何内容?感谢您的所有帮助。我删除了onkeypress()。这样做,会在第三方代码中生成错误,但不会使文本框成为只读。可能关键是在结尾处,在结束正文标记之后添加“remove attribute”js。但是,问题是第三方代码有点虚假。而且网站是动态构建的,因此没有实际的结束正文标记。我们已经没有东西可以试了,所以他们决定联系供应商……谢谢大家的帮助。
<script type="text/javascript">
function onKeyPress(textbox, event) {
textbox.value += event.key;
}
document.getElementById("ToTextBox").removeAttribute("onkeypress");
</script>
"return TheControl.RY(this, event);"
<input name="TheControl$ToTextBox" type="text" readonly="readonly" id="TheControl_ToTextBox" tabindex="1" onkeypress="return TheControl.RY(this, event);" />