使用HTML '只读=‘只读’' 与JavaScript的奇怪行为 'ele

2019-06-24 11:07发布

一些背景知识

所以,我完成了在Web应用程序,做一些数据的自动插入一些改进。 有文本框的少数用户填写,并在它们之间具有自动计算值的其他文本框。 接收自动计算值的文本框必须readOnly的防止用户的变化,但不能禁用或他们不会得到回发上提交。 每个文本框的也有旁边的复选框,这样用户就可以有意识地检查一下以现场可写,从而使他们能够覆盖插入值。

浏览器:IE 7(不知道这是如何的行为在别人)

问题

当设置readOnly支持JavaScript的文本框的属性,在文本框中的值将被提交与形式:我可以看到它与服务器端(ASP.NET) myTextBox.Text和它在Request.Form("myTextBox")

如果我设置ReadOnly="true"我上<asp:TextBox />元素,并且不使用JavaScript方法,在文本框中的值不能myTextBox.Text (我假设它从未进入的ViewState ) ,但它越来越与提交形式: Request.Form("myTextBox")有一个值。

我的问题(S)

到底他妈发生了什么? 这是设计? 这是一个浏览器的问题? 难道我发现了错误? 这很烦人,我必须有一些额外的JavaScript最初禁用文本框的可写时,为了在页面加载,使我的应用程序的工作。

谢谢!

Answer 1:

这是由设计。 作为一个ASP.NET安全功能,将其设置为只读在服务器上会保持它的只读,无论在客户端上会发生什么。 如果你希望他们能够超越它,实际上提交值,那么它是不是真的只读在服务器上,只能有条件地在客户端上。 你可以做一个回发时,他们选中复选框,更改服务器上的只读属性,或者只设置使用该ASP.NET代码在客户端上的只读属性:

MyControl.Attributes.Add("readOnly","readOnly")


Answer 2:

好吧,我调整我的样本,我想我看到的问题 - 我可能是错的,但我认为这是按预期行为。

当您设置一个字段设置为只读的代码隐藏的ASP:TextBox似乎甚至JS成为不可改变的。 我做了一个变化,变化体现在JS和形式,但文本框保留了原有的文本值 - 除非我的请求看。 形成像你一样。

我不认为这是一个错误。 我认为这是故意的,让一些完全锁定 - 只读在服务器端挂在它看起来像一个首选。

我建议使用隐藏的输入字段和跨度或东西ASP:Labels (这有效地呈现为跨度)给的显示方式由用户是不可调的?

或者,如果你有机会到JS库(如jQuery),你可以设置一个CSS类在你的文本框(带CssClass="readonly"或类似的东西在你的标签),然后用选择过程来调整属性,像这样(假设jQuery的,很容易用其它语言编写):

$("input.readonly").attr("readonly","readonly");

这样一来,你不重写多少你的标记,这是一个quick'n'easy JS修复。



文章来源: Strange behavior using HTML 'readonly=“readonly”' vs. JavaScript 'element.readOnly = true;'