Eu pensei que eles poderiam estar, mas como não estou colocando meu dinheiro onde minha boca estava (por assim dizer) definindo o atributo readonly, na verdade, não parece fazer nada.
Prefiro não usar Desativado, pois quero que as caixas de seleção marcadas sejam enviadas com o restante do formulário, mas não quero que o cliente possa alterá-las em determinadas circunstâncias.
readonly
)readonly
! Por que então esse atributo existiria!readonly
é apenas um atributo do lado do cliente para ajudar um navegador a renderizar um site corretamente e a construir a solicitação correta a partir dele. O servidor não pode e não deve saber sobre oreadonly
atributo da página renderizada. Ele deve assumir que a solicitação veio de qualquer lugar (e possivelmente com intenções maliciosas); nunca confie na entrada fornecida pelo usuário. Ainda assim, por que enviar o valor de uma caixa de seleção que você não pode editar em uma solicitação (se você definir o valor antes da renderização, você já sabe o valor quando a solicitação é enviada, portanto não há necessidade de transmiti-lo na solicitação)readonly
atributo existe lá por algum motivo. Certamente não tem nada a ver com a implementação do servidor. Mas existe para informar ao usuário "Ei! Esse valor está sendo assumido aqui e / mas você não pode alterar isso".Respostas:
você pode usar isso:
Isso funciona porque o retorno falso do evento click interrompe a cadeia de execução.
fonte
checked="checked"
, não mexa no javascript. O javascript está aí apenas para forçar os cliques do mouse a serem ignorados no objeto de entrada, não para definir o estado da caixa de seleção.READONLY
não funciona nas caixas de seleção, pois impede que você edite o valor de um campo , mas com uma caixa de seleção você está realmente editando o estado do campo (ativado || desativado)Do site faqs.org :
Se você não deseja usar,
disabled
mas ainda deseja enviar o valor, que tal enviar o valor como um campo oculto e apenas imprimir seu conteúdo para o usuário quando ele não atender aos critérios de edição? por exemplofonte
Esta é uma caixa de seleção que você não pode alterar:
Basta adicionar
disabled="disabled"
como um atributo.Edite para endereçar os comentários:
Se você deseja que os dados sejam postados de volta, uma solução simples é aplicar o mesmo nome a uma entrada oculta:
Dessa forma, quando a caixa de seleção estiver definida como 'desativada', ela serve apenas ao propósito de uma representação visual dos dados, em vez de realmente estar 'vinculada' aos dados. Na postagem de retorno, o valor da entrada oculta está sendo enviado quando a caixa de seleção está desabilitada.
fonte
Mas você absolutamente deve validar os dados no servidor para garantir que não foram alterados.
fonte
outra "solução simples":
fonte
name
evalue
atributos de seu manequim-box, também="checked"
e="diabled"
attrib-valores podem ser deixados. w3.org/TR/html-markup/input.checkbox.htmlIsso apresenta um pouco de um problema de usabilidade.
Se você deseja exibir uma caixa de seleção, mas não deixá-la interagir, por que até uma caixa de seleção?
No entanto, minha abordagem seria usar desativado (o usuário espera que uma caixa de seleção desativada não seja editável, em vez de usar JS para fazer com que uma ativada não funcione) e adicionar um manipulador de envio de formulário usando javascript que habilite as caixas de seleção imediatamente antes do formulário. submetido. Dessa forma, você obtém seus valores lançados.
ou seja, algo como isto:
fonte
com jquery:
ainda pode ser uma boa idéia dar uma dica visual (css, texto, ...), de que o controle não aceitará entradas.
fonte
$(':checkbox[readonly]')
marcar todas as caixas de seleção de candidatos, pois oreadonly
valor do atributo é opcional.Eu usei isso para alcançar os resultados:
fonte
Por acaso notei a solução dada abaixo. Em achei minha pesquisa para o mesmo problema. Não sei quem o postou, mas não foi feito por mim. Ele usa jQuery:
Isso tornaria as caixas de seleção somente leitura, o que seria útil para mostrar dados somente leitura ao cliente.
fonte
fonte
onclick="javascript: return true;"
apenas faz com que funcione como uma caixa de seleção normal. Dicas? Obrigado!checked
atributo e mantenha-ofalse
no lugar.Resposta tardia, mas a maioria das respostas parece complicar demais.
Pelo que entendi, o OP estava basicamente querendo:
Note-se que:
disabled
atributo, porque 'deseja que as caixas de seleção marcadas sejam enviadas com o restante do formulário'.yes
oufalse
, mas pode ser qualquer texto.Portanto, como o
readonly
atributo não funciona, a melhor solução, sem a necessidade de javascript, é:Portanto, para uma caixa de seleção marcada:
Para uma caixa de seleção desmarcada:
O principal problema com entradas desativadas, especialmente as caixas de seleção, é o baixo contraste que pode ser um problema para alguns com certas deficiências visuais. Pode ser melhor indicar um valor com palavras simples, como
Status: none
ouStatus: implemented
, mas incluindo a entrada oculta acima quando a última é usada, como:fonte
A maioria das respostas atuais tem um ou mais destes problemas:
O seguinte é simples e não apresenta nenhum desses problemas.
Se a caixa de seleção for somente leitura, ela não será alterada. Se não for, será. Ele usa jquery, mas você provavelmente já está usando isso ...
Funciona.
fonte
fonte
Se você deseja que eles sejam enviados ao servidor com o formulário, mas não sejam interativos para o usuário, você pode usar o
pointer-events: none
css ( funciona em todos os navegadores modernos, exceto o IE10 e Opera 12 ) e definir o índice de tabulação-1
para evitar alterações via teclado. Observe também que você não pode usar alabel
tag, pois clicar nela mudará o estado de qualquer maneira.fonte
for
atributo Nesse caso, você pode usarinput[type="checkbox"][readonly] + label { pointer-events: none !important; }
.label
e adicionoutabindex
? Como você define o foco no elemento fora de foco para pressionar um espaço nele?<input type="checkbox" onclick="return false" />
vai funcionar para você, eu estou usando issofonte
Algumas das respostas aqui parecem um pouco indiretas, mas aqui está um pequeno truque.
então no jquery você pode escolher uma das duas opções:
O que outras pessoas estão dizendo
demo: http://jsfiddle.net/5WFYt/
fonte
Com base nas respostas acima, se estiver usando jQuery, esta pode ser uma boa solução para todas as entradas:
Estou usando isso com o asp.net MVC para definir alguns elementos de formulário somente leitura. O exemplo acima funciona para caixas de texto e de seleção, definindo qualquer contêiner pai como .readonly, como nos seguintes cenários:
fonte
fonte
Eu sei que "desativado" não é uma resposta aceitável, pois o op quer que ele seja publicado. No entanto, você sempre precisará validar valores no lado do servidor, MESMO, se tiver a opção somente leitura definida. Isso ocorre porque você não pode impedir que um usuário mal-intencionado publique valores usando o atributo somente leitura.
Sugiro armazenar o valor original (lado do servidor) e defini-lo como desativado. Em seguida, quando eles enviarem o formulário, ignore os valores postados e leve os valores originais que você armazenou.
Ele parecerá e se comportará como um valor somente leitura. E lida com (ignora) postagens de usuários mal-intencionados. Você está matando 2 coelhos com uma cajadada só.
fonte
Eu teria comentado a resposta de ConroyP, mas isso requer 50 reputação que eu não tenho. Tenho reputação suficiente para postar outra resposta. Desculpa.
O problema com a resposta da ConroyP é que a caixa de seleção se torna imutável por nem mesmo incluí-la na página. Embora Electrons_Ahoy não estipule tanto, a melhor resposta seria aquela em que a caixa de seleção imutável seria semelhante, se não a mesma que a caixa de seleção mutável, como é o caso quando o atributo "desativado" é aplicado. Uma solução que aborda os dois motivos que a Electrons_Ahoy fornece por não querer usar o atributo "disabled" não seria necessariamente inválida porque utilizava o atributo "disabled".
Suponha duas variáveis booleanas, $ selected e $ disabled:
A caixa de seleção é exibida como marcada se $ marcada for verdadeira. A caixa de seleção é exibida como desmarcada se $ marcado for falso. O usuário pode alterar o estado da caixa de seleção se e somente se $ disabled for falso. O parâmetro "my_name" não é publicado quando a caixa de seleção está desmarcada, pelo usuário ou não. O parâmetro "my_name = 1" é publicado quando a caixa de seleção está marcada, pelo usuário ou não. Acredito que é isso que a Electrons_Ahoy estava procurando.
fonte
Não, as caixas de seleção de entrada não podem ser apenas de leitura.
Mas você pode torná-los somente leitura com javascript!
Adicione esse código em qualquer lugar e a qualquer momento para fazer com que as caixas de seleção funcionem somente como assumidas, impedindo que o usuário as modifique de qualquer forma.
Você pode adicionar esse script a qualquer momento após o carregamento do jQuery.
Ele funcionará para elementos adicionados dinamicamente.
Ele funciona selecionando o evento click (que ocorre antes do evento de alteração) em qualquer elemento da página e, em seguida, verifica se esse elemento é uma caixa de seleção somente leitura e, se for, bloqueia a alteração.
Existem muitos ifs para não afetar o desempenho da página.
fonte
Basta usar uma tag desativada simples como esta abaixo.
fonte
uma idéia alternativa é usar uma sobreposição e encobrir somente sua leitura entradas
http://pure-essence.net/2011/09/22/jquery-read-only-elements/
fonte
Se você deseja que TODAS as suas caixas de seleção estejam "bloqueadas" para que o usuário não possa alterar o estado "marcado" se o atributo "somente leitura" estiver presente, use o jQuery:
O legal desse código é que ele permite que você altere o atributo "somente leitura" em todo o seu código sem precisar reativar todas as caixas de seleção.
Também funciona para botões de opção.
fonte
O principal motivo pelo qual as pessoas desejam uma caixa de seleção somente leitura e (também) um grupo de rádio somente leitura é para que as informações que não podem ser alteradas possam ser apresentadas de volta ao usuário na forma em que foram inseridas.
OK desativado fará isso - infelizmente os controles desativados não podem ser navegados pelo teclado e, portanto, são contrários a toda legislação de acessibilidade. Este é o maior problema em HTML que eu conheço.
fonte
Contribuindo muito, muito tarde ... mas de qualquer maneira. No carregamento da página, use o jquery para desativar todas as caixas de seleção, exceto a selecionada atualmente. Em seguida, defina o selecionado atualmente como somente leitura, para ter uma aparência semelhante à dos desabilitados. O usuário não pode alterar o valor e o valor selecionado ainda é enviado.
fonte
Muito tarde para a festa, mas encontrei uma resposta para o MVC (5), desativei o CheckBox e adicionei um HiddenFor ANTES da caixa de seleção, portanto, quando estiver postando, se encontrar o campo Oculto primeiro e usar esse valor. Isso funciona.
fonte
Eu usaria o atributo readonly
Em seguida, use CSS para desativar as interações:
Observe que o uso da pseudo-classe: somente leitura não funciona aqui.
fonte
READONLY não funciona. Você pode fazer algo interessante com CSS, mas geralmente os desativamos.
AVISO: Se eles forem postados de volta, o cliente poderá alterá-los, ponto final. Você não pode confiar apenas na leitura para impedir que um usuário altere alguma coisa. O poderia sempre usar violinista ou apenas chane o html w / firebug ou algo assim.
fonte
Minha solução é realmente o oposto da solução FlySwat, mas não tenho certeza se funcionará para a sua situação. Eu tenho um grupo de caixas de seleção e cada um tem um manipulador onClick que envia o formulário (eles são usados para alterar as configurações de filtro de uma tabela). Não quero permitir vários cliques, pois os cliques subsequentes após o primeiro são ignorados. Desabilito todas as caixas de seleção após o primeiro clique e depois de enviar o formulário:
onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"
As caixas de seleção estão em um elemento de extensão com um ID de "filtros" - a segunda parte do código é uma instrução jQuery que percorre as caixas de seleção e desativa cada uma. Dessa forma, os valores da caixa de seleção ainda são enviados por meio do formulário (desde que o formulário foi enviado antes de desativá-los) e evitam que o usuário os altere até que a página seja recarregada.
fonte