HTML 체크 박스를 읽기 전용으로 설정할 수 있습니까?


817

나는 그들이 할 수 있다고 생각했지만, 내 입이 (그렇게 말하면) 어디에 돈을 넣지 않았기 때문에 readonly 속성을 설정하는 것은 실제로 아무것도하지 않는 것 같습니다.

체크 박스를 나머지 양식과 함께 제출하기를 원하기 때문에 Disabled를 사용하지 않고 클라이언트가 특정 상황에서 해당 확인란을 변경할 수 있기를 원하지 않습니다.


39
(악의적 인) 클라이언트는 항상 확인란의 값을 변경하거나 임의의 요청을 보낼 수 있습니다. 항상 올바른 서버 측 유효성 검사를 수행하십시오!
knittl

4
@knittl 그러나 정상적인 Vistor에는 (악의적 인) 클라이언트가 없습니다. 그리고 정상적인 Vistor는 정보를 바꾸고 싶지 않았습니다. (그것의 의미입니다 readonly)
Christian Gollhardt

3
@knittl 당신은 전체 감각을 무시하는 것 같습니다 readonly! 왜이 속성이 존재할까요!
Izhar Aazmi

10
@IzharAazmi : readonly는 브라우저가 사이트를 올바르게 렌더링 한 다음 올바른 요청을 구성하는 데 도움이되는 클라이언트 측 속성입니다. 서버는 readonly렌더링 된 페이지 의 속성을 알 수 없으며 알 수 없습니다 . 요청이 어디에서나 (악의적 인 의도로) 온 것으로 가정해야합니다. 사용자가 제공 한 입력에 의존하지 마십시오. 여전히 요청에서 편집 할 수없는 확인란의 값을 보내야하는 이유 (렌더링 전에 값을 설정 한 경우 요청을 제출할 때 값을 이미 알고 있으므로 요청에 전송할 필요가 없음)
knittl

4
@knittl 동의합니다! 그러나 readonly어떤 이유로 속성이 존재하는 것을 볼 수 있습니다 . 서버 측 구현과는 아무런 관련이 없습니다. 그러나 사용자에게 "이봐!이 값은 가정되고 있지만 변경할 수는 없습니다."
Izhar Aazmi

답변:


538

이것을 사용할 수 있습니다 :

<input type="checkbox" onclick="return false;"/>

click 이벤트에서 false를 반환하면 실행 체인이 계속 중지되므로 작동합니다.


29
자바 스크립트에서 false를 반환하면 클릭 또는 키 핸들러에 대한 실행 체인이 계속되지 않습니다. 확인란의 상태와 아무 관련이 없습니다
Jessica Brown

9
추신 ... 체크 박스를 체크 상태로 만들고 싶다면 checked="checked"자바 스크립트를 망칠 필요가 없습니다. 자바 스크립트는 확인란의 상태를 설정하지 않고 입력 객체에서 마우스 클릭을 무시하도록합니다.
Jessica Brown

8
이 경우 r / o 상태를 시각적으로 표시하지 않습니다.
Jesse Glick

11
TAB을 사용하여 다음 입력으로 이동하지 못하게합니다.
user327961

7
자바 스크립트가 비활성화되면 완전히 실패합니다!
Doin

419

READONLY필드 을 편집 할 수 없으므로 확인란에서 작동하지 않지만 확인란을 사용하면 실제로 필드의 상태를 편집하고 있습니다 (on || off)

에서 faqs.org :

READONLY는 사용자가 필드와 상호 작용하지 않고 필드의 값을 변경하는 것을 막을 수 있다는 것을 이해하는 것이 중요합니다. 예를 들어, 체크 박스에서 체크 또는 체크 (체크 상태 설정) 할 수 있지만 필드 값은 변경하지 않습니다.

사용하고 싶지 disabled않지만 여전히 값을 제출하려면 값을 숨겨진 필드로 제출하고 편집 기준을 충족하지 않을 때 사용자에게 내용을 인쇄하는 방법은 어떻습니까? 예 :

// user allowed change
if($user_allowed_edit)
{
    echo '<input type="checkbox" name="my_check"> Check value';
}
else
{
    // Not allowed change - submit value..
    echo '<input type="hidden" name="my_check" value="1" />';
    // .. and show user the value being submitted
    echo '<input type="checkbox" disabled readonly> Check value';
}

135
작동하지만, 일종의 .. 체크 박스에 대한 읽기 전용의 더러워지고 읽기 전용은 직관이 말하는 것을 단순히 수행해야합니다.
levhita

8
ConroyP가 설명했듯이 직감은 우리를 속인다.
ANeves

120
직감은 미국을 속이는 것이 아니라, 이런 방식으로 확인란을 구현 한 사람들을 속였습니다.
Califf

@ConroyP-> "를 사용하면 필드 값을 편집 할 수 없지만 확인란을 사용하면 실제로 필드 상태를 편집합니다 (|| off)". 그것은 골머리 결정에 대한 정말 약한 정당화입니다. '주'와 '가치'는 대부분의 사람들에게 'toMAYto'및 'toMAHto'와 거의 동일합니다. 동의하지 않는 사람들이 수행 한 공감대에서 볼 수 있습니다.
McAuley

343

변경할 수없는 확인란입니다.

<input type="checkbox" disabled="disabled" checked="checked">

disabled="disabled"속성으로 추가하십시오 .


주석을 처리하도록 편집하십시오.

데이터를 다시 게시하려면 간단한 해결책보다 동일한 이름을 숨겨진 입력에 적용하는 것입니다.

<input name="myvalue" type="checkbox" disabled="disabled" checked="checked"/>
<input name="myvalue" type="hidden" value="true"/>

이 방법으로 확인란을 '비활성화'로 설정하면 실제로 데이터에 '연결'되는 대신 시각적으로 데이터를 표시 할 수 있습니다. 포스트 백에서, 체크 박스가 비활성화되면 숨겨진 입력 값이 전송됩니다.


331
"비활성화 됨"확인란은 POST 데이터를 통해 값을 보내지 않습니다.
biphobe

66
@powtac 당신은 그가 데이터를 게시하고 싶다고 말하지 않고, 당신의 예제는 그렇게하지 않습니다.
David Mårtensson

70
이 답변에 105 개의 공감대가 있어야하는 방법은 없습니다. OP 상태의 모든 것에 반대합니다.
JM4

15
@nathanhayfield : 그 논리에 따라 어떤 주제 에 관한 유용한 답변을 게시하고 투표를 할 수 있어야합니다 . :(
Michael Bray

24
@MichaelBray 많은 사람들이 체크 박스를 읽기 전용으로 만드는 방법을 알고 싶어하기 때문에 많은 찬사를받습니다 .1) Google "Checkbox readonly". 2)이 질문의 제목이 원하는 내용과 일치하는지 확인한 후 클릭하십시오. 3)이 답변을 찾을 때까지 아래로 스크롤하십시오. 4) 행복과 공감.
Mark Byers

63
<input type="checkbox" onclick="this.checked=!this.checked;">

그러나 서버의 데이터가 변경되지 않았는지 확인해야합니다.


4
나는 이것이 최선의 해결책이라는 것을 알았다. 또한 다른 코드 조각 (예 : jquery-stuff)을 호출하여 "처음 x를 수행 할 때까지 변경할 수 없습니다"라는 멋진 작은 부호를 표시 할 수 있습니다. "... onclick = 'this.checked =! this.checked; javascript : theCheckboxWasClicked ();'..."
Bane

powtac의 답변처럼 상자가 회색으로 표시되지 않아서 내 투표를 얻었습니다.
EHarpham

이것은 약간의 해킹이지만 독창적이고 완벽하며 거의 우아한 작은 해킹입니다.
russell

최고의 솔루션. 정답으로 표시해야합니다.
Scottie

3
위에서 언급했듯이 IE에서는 두 번 클릭하면 작동하지 않습니다. 사용했습니다 : onchange = "this.checked = true;"
Ritikesh

57

또 다른 "간단한 해결책":

<!-- field that holds the data -->
<input type="hidden" name="my_name" value="1" /> 
<!-- visual dummy for the user -->
<input type="checkbox" name="my_name_visual_dummy" value="1" checked="checked" disabled="disabled" />

disabled = "disabled"/ disabled = true


1
이렇게하면 모든 문제가 해결됩니다. 읽기 전용 확인란을 만들고, POST 데이터를 제출하며, 모든 자바 스크립트 솔루션과 달리 읽기 전용을 시각적으로 표시합니다.
Dalibor Frivaldsky

2
당신은 또한 내려 수 namevalue당신의 더미 상자에서 속성,도 ="checked"="diabled"ATTRIB-값은 내려 될 수있다. w3.org/TR/html-markup/input.checkbox.html
Sampo Sarrala-codidact.org

가장 중요한 것은이 솔루션은 평범한 오래된 HTML이며 Javascript에 의존하지 않습니다.
GlennG

45

이것은 약간의 유용성 문제를 나타냅니다.

확인란을 표시하고 상호 작용하지 않으려면 왜 확인란을 선택해야합니까?

그러나 내 접근 방식은 disabled를 사용하는 것입니다 (사용자는 JS를 사용하여 작동하지 않는 확인란을 편집하는 대신 편집 가능하지 않은 확인란을 예상하고 양식이 있기 직전에 확인란을 활성화하는 javascript를 사용하여 양식 제출 핸들러를 추가합니다) 제출했습니다. 이렇게하면 값을 게시 할 수 있습니다.

즉 다음과 같은 것 :

var form = document.getElementById('yourform');
form.onSubmit = function () 
{ 
    var formElems = document.getElementsByTagName('INPUT');
    for (var i = 0; i , formElems.length; i++)
    {  
       if (formElems[i].type == 'checkbox')
       { 
          formElems[i].disabled = false;
       }
    }
}

22
또 다른 옵션은 비활성화 된 확인란 (또는 이미지 또는 확인 / 선택 취소를 나타내는 이미지)을 표시하고 서버에서 처리하는 숨겨진 입력을 갖는 것입니다.
Juan Mendes

5
일부 결정이 다른 입력에 영향을 미치는 양식 (일명 : 첫 번째 조치를 실행 취소하지 않으면 건드릴 수없는 값 설정)이있을 때 유용성 문제가 아닙니다. 나는 사람들이 대답하는 대신 사람들의 마음을 바꾸려고 할 때 싫어합니다 (@FlySwat에 관한 것이 아닙니다, 당신은 대답했습니다).
Pherrymason

7
목적은 확인란을 "이 값은 true"표시 필드로 사용하는 것입니다. "true"/ "false"-s보다 테이블을 스캔하기가 더 쉽습니다. 물론, 당신은 아이콘을 사용할 수는 있지만, 양식에서는 확인란이 사용하기에 적합합니다.
Olie

1
나는 일반적 으로이 솔루션을 사용하지만 때로는 느린 연결에서 사용자는 양식 제출 후 활성화 된 입력 버튼을보고 그것을 사용하기로 결정합니다.
systempuntoout

2
포함하거나 포함 할 수없는 일련의 "기능"이 있다고 가정하면 기능에 확인란을 표시하는 템플릿이 있습니다. 그러나 때로는 다른 기능의 전제 조건 인 기능이 포함되어야합니다. 반드시 포함해야하지만 템플릿을 변경하고 싶지는 않습니다. 비활성화 / 체크 된 체크 박스가 바로 그런 것입니다. 그들은 영원히 주변에 있었으므로 "체크 박스조차도"라는 질문이 수사적 이었으면 좋겠다.
Triynko

38
<input type="checkbox" readonly="readonly" name="..." />

jquery로 :

$(':checkbox[readonly]').click(function(){
            return false;
        });

컨트롤이 입력을 받아들이지 않는다는 시각적 힌트 ​​(css, text, ...)를 제공하는 것이 좋습니다.


이것은 ie6에서 작동하지 않았습니다. 읽기 전용 속성 필터가 올바르게 작동하지 않습니다. 필터에서 가져 와서 속성 검사를 함수 본문에 넣고 ie6에서 제대로 작동합니다.
gt124

3
표준 속성 대신 "data-readonly = true"를 사용했으며 모든 브라우저에서 제대로 작동합니다. 이 솔루션은 +1 이상의 다른 솔루션보다 더 좋아합니다.
peipst9lker

1
선택기는 속성 값이 선택 사항이므로 $(':checkbox[readonly]')모든 후보 확인란을 선택 해야합니다 readonly.
Izhar Aazmi

21

나는 이것을 사용하여 결과를 얻었습니다.

<input type=checkbox onclick="return false;" onkeydown="return false;" />

내 경우에는 세미콜론없이 작동하지만 그렇지 않으면 작동하지 않습니다.
Mwiza

12

아래 주어진 해결책을 발견했습니다. 같은 문제에 대한 내 연구를 찾았습니다. 나는 누가 그것을 게시하지 않았지만 그것은 나에 의해 만들어지지 않았습니다. jQuery를 사용합니다.

$(document).ready(function() {
    $(":checkbox").bind("click", false);
});

그러면 체크 박스가 읽기 전용이되어 클라이언트에 읽기 전용 데이터를 표시하는 데 도움이됩니다.


1
이 질문은 비활성화 된 것이 아니라 읽기 전용 확인란을 요구합니다. 이것이 가장 정답입니다.
NileshChauhan

9
onclick="javascript: return false;"

흠 ... 이것은 거짓 / 확인되지 않은 경우에 작동하지만 onclick="javascript: return true;"정상적인 확인란처럼 작동합니다. 힌트? 감사!
Olie

@Olie, checked속성을 추가 하고 그대로 유지하십시오 false.
Qwertiy 2016 년

7

뒤늦은 답변이지만 대부분의 답변은 지나치게 복잡해 보입니다.

내가 이해했듯이 OP는 기본적으로 원했습니다.

  1. 상태를 표시하는 읽기 전용 확인란.
  2. 양식과 함께 반환 된 값입니다.

다음 사항에 유의하십시오.

  1. OP는 disabled'체크 된 확인란이 나머지 양식과 함께 제출되기를 원하므로'속성 을 사용하지 않는 것을 선호했습니다 .
  2. 위의 1에서 OP의 인용 부호가 이미 알고 있음을 나타내므로 선택하지 않은 확인란은 양식과 함께 제출되지 않습니다. 기본적으로 확인란의 값은 선택되어있는 경우에만 존재합니다.
  3. 비활성화 된 확인란은 의도적으로 변경할 수 없음을 나타내므로 사용자가 변경을 시도하지 않을 수 있습니다.
  4. 체크 박스의 값은 같은 상태를 나타내는에 한정되지 않고, yesfalse,하지만 텍스트가 될 수 있습니다.

따라서 readonly속성이 작동하지 않기 때문에 자바 스크립트가 필요없는 최상의 솔루션은 다음과 같습니다.

  1. 이름이나 값이없는 비활성화 된 확인란입니다.
  2. 확인란이 선택된 상태로 표시되면 서버에 저장된 이름과 값을 가진 숨겨진 필드입니다.

확인란을 선택하십시오.

<input type="checkbox" checked="checked" disabled="disabled" />
<input type="hidden" name="fieldname" value="fieldvalue" />

확인란을 선택하지 않은 경우 :

<input type="checkbox" disabled="disabled" />

비활성화 된 입력, 특히 확인란의 주요 문제는 대비가 좋지 않아 특정 시각 장애가있는 사람들에게 문제가 될 수 있다는 것입니다. 이 같은 일반 단어로 값을 표시하는 것이 더있을 수 있습니다 Status: none또는 Status: implemented같은 후자를 사용하는 경우 위의 숨겨진 입력을 포함하되 :

<p>Status: Implemented<input type="hidden" name="status" value="implemented" /></p>


7

현재 답변의 대부분에는 다음과 같은 문제가 하나 이상 있습니다.

  1. 키보드가 아닌 마우스 만 확인하십시오.
  2. 페이지로드시 확인하십시오.
  3. 항상 인기있는 변경 사항을 연결하거나 다른 항목이 연결되어 있으면 항상 작동하지 않는 이벤트를 제출하십시오.
  4. javascript를 사용하여 확인란을 다시 활성화하려면 숨겨진 입력 또는 기타 특수 요소 / 속성이 필요합니다.

다음은 간단하며 문제가 없습니다.

$('input[type="checkbox"]').on('click keyup keypress keydown', function (event) {
    if($(this).is('[readonly]')) { return false; }
});

확인란이 읽기 전용이면 변경되지 않습니다. 그렇지 않으면 그렇습니다. jquery를 사용하지만 이미 사용하고있을 것입니다 ...

효과가있다.



6

양식을 사용하여 서버에 제출하지만 사용자를 위해 상호 작용 하지 않으려면 pointer-events: noneCSS를 사용 하고 (IE10- 및 Opera 12-를 제외한 모든 최신 브라우저에서 작동 ) -1키보드를 통한 변경을 방지 하도록 tab-index를 설정할 수  있습니다. 또한 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>


마지막 문장을 반복 해 보겠습니다. (귀하가 놓치고 소중한 시간을 낭비했습니다.) <label>이 있으면 기술이 쓸모가 없습니다 (Firefox에서는 실제로 완벽하게 작동합니다. 문제는 Chrome에 있습니다).
Niccolo M.

@NiccoloM.이지만 읽기 전용임을 알고 있다면 왜 라벨로 포장해야합니까? 또한 그 뒤에 레이블을 넣고 for속성을 사용할 수 있습니다 . 이 경우을 사용할 수 있습니다 input[type="checkbox"][readonly] + label { pointer-events: none !important; }.
Qwertiy 2014 년

@KevinBui, 제거 label하고 추가 tabindex했습니까? 초점을 맞출 수없는 요소에 초점을 설정하여 공간을 누르는 방법은 무엇입니까?
Qwertiy

5

<input type="checkbox" onclick="return false" /> 당신을 위해 일할 것입니다, 나는 이것을 사용하고 있습니다.


5

여기에 대한 답변 중 일부는 약간 우회적 인 것처럼 보이지만 여기에는 약간의 해킹이 있습니다.

<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();
    });

});

데모 : http://jsfiddle.net/5WFYt/


3
그리고 이것은 "주변"이 아닙니다 ??
KoZm0kNoT

아, 그것은 매우 직접적입니다. 그것은 간결하지 않습니다.
sksallaj

4

위의 답변을 바탕으로 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
<input type="radio" name="alwaysOn" onchange="this.checked=true" checked="checked">
<input type="radio" name="alwaysOff" onchange="this.checked=false" >

4

운영팀이 게시하기를 원하기 때문에 '사용 중지됨'은 허용되는 답변이 아닙니다. 그러나 읽기 전용 옵션이 설정되어 있으면 항상 서버 쪽에서도 값의 유효성을 검사해야합니다. 악의적 인 사용자가 읽기 전용 특성을 사용하여 값을 게시하는 것을 막을 수 없기 때문입니다.

원래 값 (서버 쪽)을 저장하고 비활성화로 설정하는 것이 좋습니다. 그런 다음 양식을 제출할 때 게시 된 값을 무시하고 저장 한 원래 값을 사용하십시오.

읽기 전용 값처럼 보이고 작동합니다. 또한 악의적 인 사용자의 게시물을 처리 (무시)합니다. 당신은 하나의 돌로 두 마리의 새를 죽이고 있습니다.


3

ConroyP의 답변에 대해 언급했지만, 내가 가지고 있지 않은 평판은 50입니다. 다른 답변을 게시 할만큼 평판이 좋습니다. 죄송합니다.

ConroyP의 대답의 문제는 페이지에 확인란을 포함시키지 않아도 확인란을 변경할 수 없다는 것입니다. Electrons_Ahoy가 많이 규정하지는 않지만 가장 좋은 대답은 "disabled"속성이 적용되는 경우와 같이 변경할 수없는 확인란이 변경 가능한 확인란과 같지 않을 경우와 비슷할 것입니다. Electrons_Ahoy가 "disabled"속성을 사용하지 않기로하는 두 가지 이유를 해결하는 솔루션은 "disabled"속성을 사용 했기 때문에 반드시 유효 하지는 않습니다 .

$ checked 및 $ 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" ' : '', '/>';

$ checked가 true이면 확인란이 선택되어 표시됩니다. $ checked가 false이면 확인란이 선택되지 않은 것으로 표시됩니다. $ disabled가 false 인 경우에만 확인란의 상태를 변경할 수 있습니다. "my_name"매개 변수는 사용자가 체크 박스를 선택하지 않으면 게시되지 않습니다. "my_name = 1"매개 변수는 사용자가 확인란을 선택하면 게시됩니다. 이것이 Electrons_Ahoy가 찾던 것이라고 생각합니다.


3

아니요, 입력 확인란은 읽기 전용 일 수 없습니다.

그러나 자바 스크립트로 읽기 전용으로 만들 수 있습니다!

사용자가 어떤 방식 으로든 수정하지 못하도록하여 확인란을 읽기 전용으로 설정하려면 언제든지이 코드를 추가하십시오.

jQuery(document).on('click', function(e){
      // check for type, avoid selecting the element for performance
      if(e.target.type == 'checkbox') {
          var el = jQuery(e.target);
          if(el.prop('readonly')) {
              // prevent it from changing state
              e.preventDefault();
          }
      }
});
input[type=checkbox][readonly] {
    cursor: not-allowed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label><input type="checkbox" checked readonly> I'm readonly!</label>

jQuery가로드 된 후 언제든지이 스크립트를 추가 할 수 있습니다.

동적으로 추가 된 요소에 작동합니다.

페이지의 요소에서 클릭 이벤트 (변경 이벤트 전에 발생)를 선택하여 작동 한 다음이 요소가 읽기 전용 확인란인지 확인한 다음 변경이 차단됩니다.

페이지 성능에 영향을 미치지 않는 경우가 너무 많습니다.




2

"readonly"속성이있는 경우 사용자가 "checked"상태를 변경할 수 없도록 모든 확인란을 "잠금"상태로 만들려면 jQuery를 사용할 수 있습니다.

$(':checkbox').click(function () {
    if (typeof ($(this).attr('readonly')) != "undefined") {
        return false;
    }
});

이 코드의 멋진 점은 모든 확인란을 리 바인드하지 않고 코드 전체에서 "읽기 전용"속성을 변경할 수 있다는 것입니다.

라디오 버튼에서도 작동합니다.


1

사람들이 읽기 전용 확인란과 읽기 전용 라디오 그룹을 원하는 주된 이유는 변경할 수없는 정보가 입력 된 형식으로 사용자에게 다시 제공 될 수 있기 때문입니다.

확인 비활성화는이 작업을 수행합니다. 불행히도 비활성화 된 컨트롤은 키보드를 탐색 할 수 없으므로 모든 접근성 법률에 위배됩니다. 이것은 내가 아는 HTML에서 가장 큰 행 아웃입니다.


1

매우 늦게 기여하지만 어쨌든. 페이지로드시 jquery를 사용하여 현재 선택된 것을 제외한 모든 확인란을 비활성화하십시오. 그런 다음 현재 선택된 것을 읽기 전용으로 설정하여 비활성화 된 것과 비슷하게 보이게합니다. 사용자가 값을 변경할 수 없으며 선택한 값이 계속 제출됩니다.


1

파티에 늦었지만 MVC에 대한 답변을 찾았습니다 (5) CheckBox를 비활성화하고 HiddenFor BEFORE 확인란을 추가 했으므로 게시 할 때 숨겨진 필드를 먼저 찾아 해당 값을 사용하면 게시합니다. 이것은 작동합니다.

 <div class="form-group">
     @Html.LabelFor(model => model.Carrier.Exists, new { @class = "control-label col-md-2" })
         <div class="col-md-10">
              @Html.HiddenFor(model => model.Carrier.Exists)
              @Html.CheckBoxFor(model => model.Carrier.Exists, new { @disabled = "disabled" })
              @Html.ValidationMessageFor(model => model.Carrier.Exists)
          </div>
 </div>

1

나는 readonly 속성을 사용할 것이다

<input type="checkbox" readonly>

그런 다음 CSS를 사용하여 상호 작용을 비활성화하십시오.

input[type='checkbox'][readonly]{
    pointer-events: none;
}

pseudo-class : read-only 사용은 여기서 작동하지 않습니다.

input[type='checkbox']:read-only{ /*not working*/
    pointer-events: none;
}

0

클라이언트가 특정 상황에서 변경하기를 원하지 않습니다.

READONLY 자체는 작동하지 않습니다. CSS로 펑키 한 것을 할 수는 있지만 일반적으로 비활성화합니다.

경고 : 게시 된 경우 고객이 기간을 변경할 수 있습니다. 사용자가 무언가를 변경하지 못하도록 읽기 전용을 사용할 수 없습니다. 는 항상 피들러를 사용하거나 html w / firebug 또는 그와 같은 것들을 노래 할 수 있습니다.


당신은 완전히 옳습니다. 그래서 서버 측에서도 확인하여 클라이언트 측의 사용자 경험을 향상시키는 것입니다.
levhita

0

내 솔루션은 실제로 FlySwat의 솔루션과 반대이지만 상황에 맞는지 확실하지 않습니다. 확인란 그룹이 있고 각 양식에는 양식을 제출하는 onClick 핸들러가 있습니다 (테이블의 필터 설정을 변경하는 데 사용됨). 첫 번째 이후의 후속 클릭은 무시되므로 여러 번의 클릭을 허용하고 싶지 않습니다. 따라서 첫 번째 클릭 후와 양식을 제출 한 후 모든 확인란을 비활성화합니다.

onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"

확인란은 ID가 "filters"인 span 요소에 있습니다. 코드의 두 번째 부분은 확인란을 반복하고 각각 비활성화하는 jQuery 문입니다. 이렇게하면 확인란 값이 양식을 통해 제출되며 (비활성화하기 전에 양식이 제출되었으므로) 페이지가 다시로드 될 때까지 사용자가 값을 변경하지 못하게합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.