提问人:ExecChef 提问时间:4/11/2019 最后编辑:ExecChef 更新时间:4/11/2019 访问量:1074
如何使用 Javascript 使 TextBox 只读
How To Make TextBox Read Only With Javascript
问:
我得到了一个用 asp 创建的旧项目,我需要将其中一个文本框设置为只读(因为它由下拉框填充,不应允许任何自由文本条目)。这将被切割并干燥以设置 ReadOnly = “True” 的属性。 .除了 Keppress 上似乎有某种 JS 函数阻止只读属性工作。我在 JS 方面的经验和知识很少,所以我不知道如何解决 - 这应该是一个容易的改变。
我尝试在html中将ReadOnly属性添加到True,但是发生了一些奇怪的事情。当用户在框中键入内容时,文本将显示在框中,但他们无法将其删除。所以,这告诉我它正在部分工作,但其他事情正在发生。
然后,我从实际页面视图(在浏览器中)查看了源代码,在那里我看到触发了 kepress 事件。.(onkeypress=“返回 TheControl.RY(this, event);”)。因为这没有显示在我的ascx文件上。
总之。.ReadOnly 属性失败,因为 onkeypress 正在触发 . . .(a) 我不完全理解 JS 在做什么,或者如何使盒子只读。
这是 .ascx 文件中文本框的代码
<span class="ComposeHeaderValue">
<asp:TextBox runat="server" ID="ToTextBox" TabIndex="1" ReadOnly="true" />
</span>
但是当我从浏览器查看源代码时,这是html:
<span class="ComposeHeaderValue">
<input name="TheControl$ToTextBox" type="text" readonly="readonly" id="TheControl_ToTextBox" tabindex="1" onkeypress="return TheControl.RY(this, event);" />
</span>
我没有任何 JS 经验,但看起来它正在调用事件 (RY) onkeypress 。.所以我在其中一个 js 文件中发现了一个名为 RY 的东西,这就是它所拥有的
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);
},
我不知道这段代码中发生了什么。我试图在 JS RY 中添加属性更改。 .但这没有用。这是我尝试过的:
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;
},
如果我找不到使文本框 ReadOnly 的方法。.由于按键事件,如何禁用按键事件的发生?从理论上讲,如果文本框是只读的,则永远不会有按键事件??
使用 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>
不确定我是否正确配置了 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);" />
我有两个问题。使用 Archer 提供的示例 . . .
他的函数名称是 onKeyPress。那么,我应该将我的函数重命名为“return TheControl.RY(this, event);”???
getElement 代码行应该在括号内还是在括号后面?Archer 在 之后显示它。..但我不明白为什么它不在括号内?
答:
如果您无法删除或退格,那么这听起来确实像是按键处理程序正在更新值,但忽略了该属性。如果 readonly 属性存在,我不希望光标闪烁,但我不知道第三方代码在做什么。readonly
但是,您可以删除按键处理程序,它可能与某些第三方代码冲突,也可能不冲突。这是最简单、最合理的解决方案,不涉及拆解别人的库。
下面是 2 个文本框的示例,我使用 Javascript 从其中一个文本框中删除了按键处理程序。
function onKeyPress(textbox, event) {
textbox.value += event.key;
}
// remove the event handler from textbox2
document.getElementById("textbox2").removeAttribute("onkeypress");
<input id="textbox1" type="text" readonly="readonly" onkeypress="onKeyPress(this, event)" placeholder="You can type in me" />
<br /><br />
<input id="textbox2" type="text" readonly="readonly" onkeypress="onKeyPress(this, event)" placeholder="You can't type in me" />
您只需要将一行 Javascript 添加到您的页面(并修改 ID 以适合您)。
唯一需要注意的是,删除按键事件处理程序的代码行必须在第三方代码添加处理程序之后进行。理想情况下,只需将其粘贴在正文最底部的脚本标签中即可。
评论
onKeyPress()
上一个:减去两个 ViewBag 值
下一个:MVC5:无法同时筛选结果和分页
评论
document.getElementById('ToTextBox').readOnly = true;
return
disabled