为什么单选button不能“只读”?

我想显示一个单选button,提交它的值,但根据情况,不能编辑。 禁用不起作用,因为它不提交的价值(或者是否?),它将灰色的单选button。 只读是我正在寻找的东西,但由于一些神秘的原因,它不起作用。

是否有一些奇怪的技巧,我需要拉动以获得只读按预期工作? 我应该用JavaScript代替吗?

顺便说一句,有没有人知道为什么只读不能在单选button,而它在其他input标签中工作? 这是HTML规范中那些不可理解的遗漏吗?

我已经伪造了一个单选button,只禁用未选中的单选button。 它使用户不会select一个不同的值,并且检查的值将始终在提交后发布。

使用jQuery进行只读:

$(':radio:not(:checked)').attr('disabled', true); 

这种方法也适用于只读select列表,除了你需要禁用每个未select的选项。

如果有其他选项,单选button只需要是只读的。 如果您没有其他选项,则选中的单选button不能被取消选中。 如果您有其他选项,则可以通过禁用其他选项来阻止用户更改值:

 <input type="radio" name="foo" value="Y" checked> <input type="radio" name="foo" value="N" disabled> 

小提琴: http : //jsfiddle.net/qqVGu/

这是你可以用的技巧。

 <input type="radio" name="name" onclick="this.checked = false;" /> 

我有一个冗长的表单(250+字段),发布到数据库。 这是一个在线就业申请。 当pipe理员查看已经提交的应用程序时,表单将填充来自数据库的数据。 input文本和textareas被replace为他们提交的文本,但收音机和checkbox是有用的作为表单元素。 禁用它们使得它们更难以阅读。 将.checked属性设置为false onclick将不起作用,因为他们可能已经被填写应用程序的用户检查。 无论如何…

 onclick="return false;" 

像“无效”无线电和checkbox的function就像是事实上的一样。

最好的解决scheme来设置选中或未选中的状态(无论是从客户端还是服务器),并不让用户在病房后改变它(即使它只读)执行以下操作:

 <input type="radio" name="name" onclick="javascript: return false;" /> 

我已经想出了一个JavaScript重载的方式来实现checkbox和单选button的只读状态。 它针对当前版本的Firefox,Opera,Safari,Google Chrome,以及当前和以前版本的IE(下至IE7)进行了testing。

为什么不简单地使用你要求的残疾人财产? 打印页面时,禁用的input元素会以灰色显示。 为此实施的客户希望所有元素都具有相同的颜色。

我不确定是否允许我在这里发布源代码,因为我在为一家公司工作的同时开发了这个源代码,但我可以肯定地分享这些概念。

使用onmousedown事件,您可以在点击操作改变之前阅读select状态。 所以你存储这些信息,然后用onclick事件恢复这些状态。

 <input id="r1" type="radio" name="group1" value="r1" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 1</input> <input id="r2" type="radio" name="group1" value="r2" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 2</input> <input id="r3" type="radio" name="group1" value="r3" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 3</input> <input id="c1" type="checkbox" name="group2" value="c1" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 1</input> <input id="c2" type="checkbox" name="group2" value="c2" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);">Option 2</input> <input id="c3" type="checkbox" name="group2" value="c3" onmousedown="storeSelectedRadiosForThisGroup(this.name);" onclick="setSelectedStateForEachElementOfThisGroup(this.name);" checked="checked">Option 3</input> 

这个JavaScript的部分将然后像这样工作(再次只有概念):

 var selectionStore = new Object(); // keep the currently selected items' ids in a store function storeSelectedRadiosForThisGroup(elementName) { // get all the elements for this group var radioOrSelectGroup = document.getElementsByName(elementName); // iterate over the group to find the selected values and store the selected ids in the selectionStore // ((radioOrSelectGroup[i].checked == true) tells you that) // remember checkbox groups can have multiple checked items, so you you might need an array for the ids ... } function setSelectedStateForEachElementOfThisGroup(elementName) { // iterate over the group and set the elements checked property to true/false, depending on whether their id is in the selectionStore ... // make sure you return false here return false; } 

您现在可以通过更改input元素的onclick和onmousedown属性来启用/禁用单选button/checkbox。

JavaScript的方式 – 这为我工作。

 <script> $(document).ready(function() { $('#YourTableId').find('*').each(function () { $(this).attr("disabled", true); }); }); </script> 

原因:

  1. $('#YourTableId').find('*') – >这将返回所有的标签。

  2. $('#YourTableId').find('*').each(function () { $(this).attr("disabled", true); }); 迭代在此捕获的所有对象并禁用input标记。

分析(debugging):

  1. form:radiobutton在内部被认为是“input”标签。

  2. 就像在上面的函数()中一样,如果你尝试打印document.write(this.tagName);

  3. 无论哪里,在标签find单选button,它返回一个input标签。

所以,上面的代码行可以更好地优化单选button标签,通过replace*input: $('#YourTableId').find('input').each(function () { $(this).attr("disabled", true); });

一个相当简单的select是创build一个在窗体的“onsubmit”事件上调用的javascript函数,以启用单选button,使其值与表单的其余部分一起发布。
它似乎没有在HTML规范上的遗漏,但一个deviseselect(一个合乎逻辑的,恕我直言),一个单选button不能只读button不能,如果你不想使用它,然后禁用它。

我发现使用onclick='this.checked = false;' 在一定程度上工作。 被单击的单选button不会被选中。 但是,如果有一个已经被选中的单选button(例如,一个默认值),该单选button将被取消选中。

 <!-- didn't completely work --> <input type="radio" name="r1" id="r1" value="N" checked="checked" onclick='this.checked = false;'>N</input> <input type="radio" name="r1" id="r1" value="Y" onclick='this.checked = false;'>Y</input> 

对于这种情况,单独保留默认值并禁用其他单选button将保留已经select的单选button,并防止它被取消选中。

 <!-- preserves pre-selected value --> <input type="radio" name="r1" id="r1" value="N" checked="checked">N</input> <input type="radio" name="r1" id="r1" value="Y" disabled>Y</input> 

这个解决scheme并不是防止默认值被改变的最优雅的方法,但是不论javascript是否被启用,它都会起作用。

对于未选中的单选button,将其标记为禁用。 这可以防止他们响应用户input并清除选中的单选button。 例如:

 <input type="radio" name="var" checked="yes" value="Yes"></input> <input type="radio" name="var" disabled="yes" value="No"></input> 

尝试disabled的属性,但我认为你不会得到单选button的价值。 或者像这样设置图片:

 <img src="itischecked.gif" alt="[x]" />radio button option 

最好的祝福。

那么在JS中捕获一个“On_click()”事件,并在这里检查它?

http://www.dynamicdrive.com/forums/showthread.php?t=33043

在init:

 pscript = "try{if($(this).attr('readonly')){return false;};}catch(err){};" Me.Attributes.Add("onclick", pscript) 

Gonza配音