Можно ли установить флажки HTML только для чтения? - PullRequest
758 голосов
/ 01 октября 2008

Я думал, что они могли бы быть, но поскольку я не кладу свои деньги туда, где мой рот (так сказать) устанавливает атрибут readonly, на самом деле, похоже, ничего не делает.

Я бы предпочел не использовать Отключено, поскольку я хочу, чтобы отмеченные флажки отправлялись вместе с остальной частью формы, я просто не хочу, чтобы клиент мог изменять их при определенных обстоятельствах.

Ответы [ 44 ]

6 голосов
/ 13 августа 2009
<input name="isActive" id="isActive" type="checkbox" value="1" checked="checked" onclick="return false"/>
5 голосов
/ 27 июля 2012

Некоторые ответы здесь кажутся немного окольными, но вот небольшой взлом.

<form id="aform" name="aform" method="POST">
    <input name="chkBox_1" type="checkbox" checked value="1" disabled="disabled" />
    <input id="submitBttn" type="button" value="Submit" onClick='return submitPage();'>
</form>​

, тогда в jquery вы можете выбрать один из двух вариантов:

$(document).ready(function(){
    //first option, you don't need the disabled attribute, this will prevent
    //the user from changing the checkbox values
    $("input[name^='chkBox_1']").click(function(e){
        e.preventDefault();
    });

    //second option, keep the disabled attribute, and disable it upon submit
    $("#submitBttn").click(function(){
        $("input[name^='chkBox_1']").attr("disabled",false);
        $("#aform").submit();
    });

});

1007 *

демо: http://jsfiddle.net/5WFYt/

5 голосов
/ 26 апреля 2012

<input type="checkbox" onclick="return false" /> будет работать для вас, я использую это

4 голосов
/ 30 ноября 2012

Опираясь на приведенные выше ответы, при использовании jQuery это может быть хорошим решением для всех входных данных:

<script>
    $(function () {
        $('.readonly input').attr('readonly', 'readonly');
        $('.readonly textarea').attr('readonly', 'readonly');
        $('.readonly input:checkbox').click(function(){return false;});
        $('.readonly input:checkbox').keydown(function () { return false; });
    });
</script>

Я использую это с Asp.Net MVC, чтобы установить некоторые элементы формы только для чтения. Вышеприведенное работает для текста и флажков, устанавливая любой родительский контейнер как .readonly, например, в следующих сценариях:

<div class="editor-field readonly">
    <input id="Date" name="Date" type="datetime" value="11/29/2012 4:01:06 PM" />
</div>
<fieldset class="flags-editor readonly">
     <input checked="checked" class="flags-editor" id="Flag1" name="Flags" type="checkbox" value="Flag1" />
</fieldset>
4 голосов
/ 23 июля 2013
<input type="radio" name="alwaysOn" onchange="this.checked=true" checked="checked">
<input type="radio" name="alwaysOff" onchange="this.checked=false" >
3 голосов
/ 05 марта 2019

Если вы хотите, чтобы они были отправлены на сервер с формой, но не были интерактивными для пользователя, вы можете использовать pointer-events: none в css ( работает во всех современных браузерах, кроме IE10- и Opera 12- ) и установите tab-index на -1, чтобы предотвратить изменение с помощью клавиатуры. Также обратите внимание, что вы не можете использовать тег label, так как нажатие на него все равно изменит состояние.

input[type="checkbox"][readonly] {
  pointer-events: none !important;
}

td {
  min-width: 5em;
  text-align: center;
}

td:last-child {
  text-align: left;
}
<table>
  <tr>
    <th>usual
    <th>readonly
    <th>disabled
  </tr><tr>
    <td><input type=checkbox />
    <td><input type=checkbox readonly tabindex=-1 />
    <td><input type=checkbox disabled />
    <td>works
  </tr><tr>
    <td><input type=checkbox checked />
    <td><input type=checkbox readonly checked tabindex=-1 />
    <td><input type=checkbox disabled checked />
    <td>also works
  </tr><tr>
    <td><label><input type=checkbox checked /></label>
    <td><label><input type=checkbox readonly checked tabindex=-1 /></label>
    <td><label><input type=checkbox disabled checked /></label>
    <td>broken - don't use label tag
  </tr>
</table>
3 голосов
/ 05 декабря 2014

Я бы прокомментировал ответ ConroyP, но для этого требуется 50 репутации, которой у меня нет. У меня достаточно репутации, чтобы опубликовать другой ответ. К сожалению.

Проблема с ответом ConroyP состоит в том, что флажок отображается неизменным, даже если он не включен на страницу. Хотя Electrons_Ahoy не оговаривает так много, лучшим ответом будет тот, в котором неизменяемый флажок будет выглядеть аналогично, если не совпадает с изменяемым флажком, как в случае применения атрибута disabled Решение, в котором рассматриваются две причины, которые Electrons_Ahoy указывает на нежелание использовать атрибут «disabled», не обязательно будет недействительным, поскольку в нем используется атрибут «disabled».

Предположим, две логические переменные: $ selected и $ disabled:

if ($checked && $disabled)
    echo '<input type="hidden" name="my_name" value="1" />';
echo '<input type="checkbox" name="my_name" value="1" ',
    $checked ? 'checked="checked" ' : '',
    $disabled ? 'disabled="disabled" ' : '', '/>';

Флажок отображается как отмеченный, если $ флажок равен true. Флажок отображается как непроверенный, если $ флажок равен false. Пользователь может изменить состояние флажка, если и только если $ disabled имеет значение false. Параметр «my_name» не публикуется, когда флажок снят, пользователем или нет. Параметр «my_name = 1» публикуется, когда флажок установлен, пользователем или нет. Я полагаю, это то, что искал Electrons_Ahoy.

3 голосов
/ 04 марта 2015

Я знаю, что «отключен» не является приемлемым ответом, поскольку операционная служба хочет, чтобы он опубликовал. Однако вам всегда придется проверять значения на стороне сервера ДАЖЕ, если у вас установлена ​​опция только для чтения. Это связано с тем, что вы не можете запретить злоумышленнику публиковать значения с помощью атрибута readonly.

Я предлагаю сохранить исходное значение (на стороне сервера) и отключить его. Затем, когда они отправляют форму, игнорируют любые опубликованные значения и принимают исходные значения, которые вы сохранили.

Это будет выглядеть и вести себя как значение, доступное только для чтения. И он обрабатывает (игнорирует) сообщения от злоумышленников. Ты убиваешь 2 зайцев одним выстрелом.

3 голосов
/ 28 декабря 2018

Просто используйте простой отключенный тег, как показано ниже.

<input type="checkbox" name="email"  disabled>
2 голосов
/ 22 сентября 2011

альтернативная идея - использовать оверлей и скрыть только для чтения входы

http://pure -essence.net / 2011/09/22 / JQuery-только для чтения-элементы /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...