jQuery DatePicker com entrada de texto que não permite a entrada do usuário
-
03-07-2019 - |
Pergunta
Como faço para usar o jQuery DatePicker com uma entrada de caixa de texto:
$("#my_txtbox").datepicker({
// options
});
que não permitem que o usuário texto aleatório de entrada na caixa de texto. Eu quero o Datepicker a aparecer quando os ganhos de caixa de texto o foco ou o usuário clica sobre ele, mas eu quero a caixa de texto para ignorar qualquer entrada do usuário usando o teclado (copiar e colar, ou qualquer outro). Eu quero encher a caixa de texto exclusivamente a partir do calendário Datepicker.
Isso é possível?
jQuery 1.2.6
Datepicker 1.5.2
Solução
Você deve ser capaz de usar o somente leitura atributo na entrada de texto, e jQuery vai ainda ser capaz de editar o seu conteúdo.
<input type='text' id='foo' readonly='true'>
Outras dicas
Com base na minha experiência que eu recomendaria a solução sugerida por Adhip Gupta:
$("#my_txtbox").attr( 'readOnly' , 'true' );
O código a seguir não vai deixar o tipo de usuário novos personagens, mas que lhes permitam excluir caracteres:
$("#my_txtbox").keypress(function(event) {event.preventDefault();});
Além disso, este irá processar a forma inútil para aqueles que têm JavaScript desabilitado:
<input type="text" readonly="true" />
try
$("#my_txtbox").keypress(function(event) {event.preventDefault();});
Se você estiver reutilizando a data-picker em vários lugares, então ele estaria apto para modificar a caixa de texto também via JavaScript usando algo como:
$("#my_txtbox").attr( 'readOnly' , 'true' );
logo após / antes do lugar onde você inicializar o datepicker.
<input type="text" readonly="true" />
faz com que a caixa de texto a perder o seu valor depois de postback.
Você sim deve usar a sugestão de Brad8118 que está funcionando perfeitamente.
$("#my_txtbox").keypress(function(event) {event.preventDefault();});
EDIT: para fazê-lo funcionar para uso IE 'keyDown' em vez de 'keypress'
$("#txtfromdate").datepicker({
numberOfMonths: 2,
maxDate: 0,
dateFormat: 'dd-M-yy'
}).attr('readonly', 'readonly');
adicionar o atributo somente leitura no jQuery.
Depois de inicializar o selecionador de data:
$(".project-date").datepicker({
dateFormat: 'd M yy'
});
$(".project-date").keydown(false);
Para datepicker de pop-up no foco ganho:
$(".selector").datepicker({ showOn: 'both' })
Se você não quiser que a entrada do usuário, adicionar isso para o campo de entrada
<input type="text" name="date" readonly="readonly" />
Você tem duas opções para obter este feito. (Tanto quanto eu sei)
-
Opção A: Faça o seu campo de texto somente leitura. Isso pode ser feito da seguinte forma.
-
Opção B: Alterar o onfocus curser. Set ti a desfocagem. isso pode ser feito através da criação do
onfocus="this.blur()"
atributo para o seu campo de texto selecionador de data.
Ex: <input type="text" name="currentDate" id="currentDate" onfocus="this.blur()" readonly/>
Eu deparei com isso, então eu estou compartilhando aqui. Aqui é a opção
https://eonasdan.github.io/bootstrap-datetimepicker/Options/ #ignorereadonly
Aqui está o código.
HTML
<br/>
<!-- padding for jsfiddle -->
<div class="input-group date" id="arrival_date_div">
<input type="text" class="form-control" id="arrival_date" name="arrival_date" required readonly="readonly" />
<span class="input-group-addon">
<span class="glyphicon-calendar glyphicon"></span>
</span>
</div>
JS
$('#arrival_date_div').datetimepicker({
format: "YYYY-MM-DD",
ignoreReadonly: true
});
Aqui está o violino:
http://jsfiddle.net/matbaric/wh1cb6cy/
Minha versão de bootstrap-datetimepicker.js é 4.17.45
Este demonstração espécie de faz isso colocando o calendário ao longo do campo de texto para que você não pode digitar nele. Você também pode definir o campo de entrada para ler apenas no HTML para ter certeza.
<input type="text" readonly="true" />
HTML
<input class="date-input" type="text" readonly="readonly" />
CSS
.date-input {
background-color: white;
cursor: pointer;
}
Eu sei que esta discussão é antiga, mas para os outros que se deparam com o mesmo problema, que implementam @ solução Brad8118 (que eu prefiro, porque se você optar por fazer a entrada somente de leitura, em seguida, o usuário não será capaz de excluir o valor de data inserido a partir datepicker se ele escolhe) e também precisa impedir que o usuário colando um valor (como @ErikPhilips sugeriu a ser necessário), eu deixo esta adição aqui, o que funcionou para mim:
$("#my_txtbox").bind('paste',function(e) { e.preventDefault(); //disable paste });
daqui https : //www.dotnettricks.com/learn/jquery/disable-cut-copy-and-paste-in-textbox-using-jquery-javascript
eo script específico inteiro usado por mim (usando fengyuanchen / datepicker plugin de vez):
$('[data-toggle="datepicker"]').datepicker({
autoHide: true,
pick: function (e) {
e.preventDefault();
$(this).val($(this).datepicker('getDate', true));
}
}).keypress(function(event) {
event.preventDefault(); // prevent keyboard writing but allowing value deletion
}).bind('paste',function(e) {
e.preventDefault()
}); //disable paste;
Eu descobri que o plugin jQuery Calendar, pelo menos para mim, em geral simplesmente funciona melhor para a seleção de datas.
$('.date').each(function (e) {
if ($(this).attr('disabled') != 'disabled') {
$(this).attr('readOnly', 'true');
$(this).css('cursor', 'pointer');
$(this).css('color', '#5f5f5f');
}
});
Aqui está a sua resposta, que é maneira de solve.You não quero usar jquery quando você restringiu a entrada do usuário no controle caixa de texto.
<input type="text" id="my_txtbox" readonly /> <!--HTML5-->
<input type="text" id="my_txtbox" readonly="true"/>
$ ( "# my_txtbox"). Prop ( 'readonly', true)
funcionou como um encanto ..
Eu sei que esta pergunta já foi respondida, e mais sugerido para uso readonly
attribure.
Eu só quero compartilhar meu cenário e resposta.
Depois de adicionar readonly
atributo para minha elementos HTML , eu problema enfrentado que não sou capaz de fazer este atributo como required
dinamicamente.
definição ainda tentou tanto como readonly
e required
no momento da criação HTML.
Então, eu sugiro não usar readonly
se você quiser defini-lo como required
também.
Em vez disso use
$("#my_txtbox").datepicker({
// options
});
$("#my_txtbox").keypress(function(event) {
return ( ( event.keyCode || event.which ) === 9 ? true : false );
});
Esta permitem prima tab
tecla apenas.
Você pode adicionar mais keycodes que você deseja ignorar.
I abaixo código desde que eu tenha adicionado tanto readonly
e required
ainda envia o formulário.
Depois de remover readonly
ele funciona corretamente.
https://jsfiddle.net/shantaram/hd9o7eor/
$(function() {
$('#id-checkbox').change( function(){
$('#id-input3').prop('required', $(this).is(':checked'));
});
$('#id-input3').datepicker();
$("#id-input3").keypress(function(event) {
return ( ( event.keyCode || event.which ) === 9 ? true : false );
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link href="https://code.jquery.com/ui/jquery-ui-git.css" rel="stylesheet"/>
<form action='https://jsfiddle.net/'>
Name: <input type="text" name='xyz' id='id-input3' readonly='true' required='true'>
<input type='checkbox' id='id-checkbox'> Required <br>
<br>
<input type='submit' value='Submit'>
</form>
substituir o ID de selecionador de tempo: IDofDatetimePicker para o seu id.
Isso impedirá que o usuário inserir quaisquer entradas adicionais do teclado mas ainda assim, o usuário será capaz de acessar o pop-up tempo.
.$ ( "# my_txtbox") keypress (function (event) {event.preventDefault ();});
Tente este fonte: https://github.com/jonthornton/jquery-timepicker/issues/109
Esta questão tem um monte de respostas mais velhos e somente leitura parece ser a solução geralmente aceite. Eu acredito que a melhor abordagem em navegadores modernos é usar o inputmode="none"
na marca de entrada HTML:
<input type="text" ... inputmode="none" />
ou, se você preferir fazê-lo no script:
$(selector).attr('inputmode', 'none');
Eu não testei-lo extensivamente, mas está a trabalhar bem nas configurações do Android que tenho usado com ele.
Ou você poderia, por exemplo, usar um campo oculto para armazenar o valor ...
<asp:HiddenField ID="hfDay" runat="server" />
e no $ ( "# my_txtbox") datepicker ({opções:.
onSelect: function (dateText, inst) {
$("#<% =hfDay.ClientID %>").val(dateText);
}
Se você quiser que o usuário selecione uma data no datepicker mas você não quer que o usuário digite dentro da caixa de texto, em seguida, use o seguinte código:
<script type="text/javascript">
$(function () {
$("#datepicker").datepicker({ maxDate: "-1D" }).attr('readonly', 'readonly');
$("#datepicker").readonlyDatepicker(true);
});