Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Javascript使文本框只读_Javascript_Jquery_Asp.net - Fatal编程技术网

如何使用Javascript使文本框只读

如何使用Javascript使文本框只读,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我得到了一个在asp中创建的旧项目,我需要将其中一个文本框设置为只读(因为它由下拉框填充,不允许任何自由文本输入)。这将被剪切并干燥以设置ReadOnly=“True”的属性。除了keppress上似乎有某种js函数阻止只读属性工作之外。我在JS方面几乎没有经验和知识,所以我不知道如何解决——什么应该是一个简单的改变 我曾尝试在html中将ReadOnly属性添加到True,但发生了一些奇怪的事情。当用户在框中键入时,文本将显示在框中,但无法删除。所以,这告诉我它部分起作用了,但还有一些事情在发

我得到了一个在asp中创建的旧项目,我需要将其中一个文本框设置为只读(因为它由下拉框填充,不允许任何自由文本输入)。这将被剪切并干燥以设置ReadOnly=“True”的属性。除了keppress上似乎有某种js函数阻止只读属性工作之外。我在JS方面几乎没有经验和知识,所以我不知道如何解决——什么应该是一个简单的改变

我曾尝试在html中将ReadOnly属性添加到True,但发生了一些奇怪的事情。当用户在框中键入时,文本将显示在框中,但无法删除。所以,这告诉我它部分起作用了,但还有一些事情在发生

然后我从实际的页面视图(在浏览器中)查看了源代码,在那里我看到了kepress事件被触发。(onkeypress=“返回控件(此事件);”)。因为我的ascx文件上没有显示

简言之。ReadOnly属性失败,因为onkeypress正在触发。(a) 我不完全理解JS在做什么,也不完全理解如何使这个框成为只读的

这是.ascx文件中文本框的代码

 <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提供的示例

  • 他的函数名为onKeyPress。那么,我是否应该将我的函数重命名为“returnthecontrol.RY(this,event);”

  • getElement代码行应该在括号内还是之后?阿切尔在……之后展示了它。。但我不明白为什么不在括号内


  • 如果无法删除或退格,则听起来确实像是按键处理程序正在更新值,但忽略了
    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);" />