为什么单选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>
原因:
-
$('#YourTableId').find('*')
– >这将返回所有的标签。 -
$('#YourTableId').find('*').each(function () { $(this).attr("disabled", true); });
迭代在此捕获的所有对象并禁用input标记。
分析(debugging):
-
form:radiobutton
在内部被认为是“input”标签。 -
就像在上面的函数()中一样,如果你尝试打印
document.write(this.tagName);
-
无论哪里,在标签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()”事件,并在这里检查它?
在init:
pscript = "try{if($(this).attr('readonly')){return false;};}catch(err){};" Me.Attributes.Add("onclick", pscript)
Gonza配音