J'ai un problème sous une forme où je fais des validations jquery. Si un champ de saisie spécifique n'est pas rempli, il doit désactiver un bouton "pas en avant" en ajoutant un attribut désactivé:
if errors
$('.btn-move-forward').attr("disabled", true)
cela fonctionne, mais j'ai également un événement de clic sur ce bouton: (coffeescript)
$('.btn-move-forward').click ->
$('#step2, #step3').toggle()
Je m'attends à .btn-move-forward
pour ne pas déclencher l'événement click lorsque le bouton est désactivé mais il le fait !!
Premièrement: je ne comprends pas pourquoi, car chaque spécification de navigateur définit que cela ne doit pas se produire. Quoi qu'il en soit, j'ai essayé de le contourner en faisant les choses suivantes:
$('.btn-move-forward').click ->
if !$(this).is(:disabled)
$('#step2, #step3').toggle()
ou ca
$('.btn-move-forward').click ->
if $(this).prop("disabled", false)
$('#step2, #step3').toggle()
ou en combinant les auditeurs d'événements comme ceci:
$('.btn-move-forward').on 'click', '.btn-move-forward:enabled', ->
$('#step2, #step3').toggle()
Non, tout cela ne fonctionnera pas correctement. Le bouton se comporte toujours comme un bouton d'avancement.
Tout ce que je veux, c'est que le bouton n'écoute pas onclick
s'il est désactivé.
La propriété disabled
ne s'applique qu'aux éléments de formulaire. Cela signifie qu'à moins que le .btn-move-forward
l'élément est un <button>
ou <input type="button">
alors l'attribut disabled
n'aura aucun effet.
Vous pouvez voir un exemple de travail utilisant un button
ici:
$('.btn-move-forward').prop("disabled", true).click(function() {
console.log('Moving forward...');
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<button class="btn-move-forward">Move forward</button>
Modifiez-le pour utiliser à la place prop()
.
$('.btn-move-forward').prop("disabled", true)
Veuillez désactiver l'événement Click
$('.btn-move-forward').off('click');
pour désactiver:
$('.btn-move-forward').prop("disabled", true);
pour réactiver:
$('.btn-move-forward').removeClass('disabled'); // do this also.
$('.btn-move-forward').prop("disabled", false);
Je pense que la désactivation de l'événement click
n'est pas une bonne idée. Parce que vous devez réactiver l'événement click
, si vous activez le bouton.
Pour disabled button
, Je viens de check disabled state
, si disabled
return
.
<span class="btn btn-sm btn-primary btn-move-forward">Book</span>
$('.btn-move-forward').addClass('disabled');
$('.btn-move-forward').on('click', function(){
if($(this).hasClass('disabled')) {
console.log('-- Button is disabled. Return from here. --');
return false;
}
// write code for click event here
$('#step2, #step3').toggle()
});
Je suis trop en retard de trop d'années: P Toujours si quelqu'un peut obtenir de l'aide sur ma réponse: HTML:
<button type="button" id="verifyBtn" class="disabled" onClick="submitForm(this);"></button>
JS:
Autoriser
$j('#verifyBtn').addClass('disabled');
$j('#verifyBtn').attr('disabled','disabled');
Pour désactiver
$j('#verifyBtn').removeClass('disabled');
$j('#verifyBtn').removeAttr('disabled','disabled');
utiliser des événements de pointeur: aucun; où vous n'avez pas besoin d'événements de clic
.btn[disabled]{pointer-events:none;}
document.querySelectorAll(".btn").forEach(btn=>{
btn.addEventListener("click", e=>{
alert(e.target.innerText)
})
})
.btn{
display:inline-block;
background: #3f51b5;
color: #fff;
box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),
0 3px 1px -2px rgba(0,0,0,.2),
0 1px 5px 0 rgba(0,0,0,.12);
border: none;
border-radius: 2px;
position: relative;
height: 36px;
margin: 10px;
min-width: 64px;
padding: 0 16px;
display: inline-block;
font-family: "Roboto","Helvetica","Arial",sans-serif;
font-size: 14px;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0;
overflow: hidden;
will-change: box-shadow;
transition: box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);
outline: none;
cursor: pointer;
text-decoration: none;
text-align: center;
line-height: 36px;
vertical-align: middle;
}
.btn[disabled]{pointer-events:none; opacity:0.5}
<div class="btn">Clickable button</div>
<div class="btn">Clickable 2 button</div>
<div class="btn">Clickable 3 button</div>
<hr />
<div class="btn" disabled>Disabled button</div>
<div class="btn" disabled>Disabled 2 button</div>
<div class="btn" disabled>Disabled 3 button</div>