Est-il possible de cliquer sur un bouton désactivé et de fournir des commentaires à l'utilisateur?
HTML:
<input type="button" value="click" disabled>
et JavaScript:
$('input').mousedown(function(event) {
alert('CLICKED');
});
Le code ci-dessus ne fonctionne pas pour moi; ce n'est pas non plus:
$('input').live('click', function () {
alert('CLICKED');
});
Il n'y a aucun moyen de capturer un clic sur les éléments désactivés. Le mieux est de réagir à un class
spécifique sur l'élément.
Balisage HTML:
<input type="button" class="disabled" value="click" />
Code JavaScript:
$('input').click(function (event) {
if ($(this).hasClass('disabled')) {
alert('CLICKED, BUT DISABLED!!');
} else {
alert('Not disabled. =)');
}
});
Vous pouvez ensuite utiliser le style CSS pour simuler un aspect désactivé:
.disabled
{
background-color: #DDD;
color: #999;
}
Voici un jsFiddle démontrant son utilisation.
Faire le champ readonly
peut aider, car l'événement click sera déclenché. Soyez conscient des différences de comportement .
<input type="button" value="click" readonly="readonly" />
Mettre
input[disabled] {pointer-events:none}
dans votre CSS (cela empêche certains navigateurs de supprimer complètement les clics sur les entrées désactivées) et capturez le clic sur un élément parent. C'est une solution plus propre, à mon humble avis, que de mettre une superposition transparente sur l'élément pour capturer le clic, et selon les circonstances, il peut également être beaucoup plus facile que de simplement "simuler" l'état désactivé à l'aide de CSS (car cela n'empêchera pas l'entrée d'être soumis, et nécessite également de remplacer le style par défaut du navigateur "désactivé").
Si vous disposez de plusieurs de ces boutons, vous aurez besoin d'un parent unique pour chacun, afin de pouvoir distinguer le bouton sur lequel vous avez cliqué, car avec pointer-events:none
, la cible du clic est le parent du bouton plutôt que le bouton lui-même. (Ou vous pouvez tester les coordonnées du clic, je suppose ...).
Si vous devez prendre en charge les anciens navigateurs, vérifiez ceux qui prennent en charge pointer-events
: http://caniuse.com/#search=pointer-events
Vous ne pouvez pas sans une solution de contournement, voir: jQuery détecter cliquez sur le bouton d'envoi désactivé
Les navigateurs désactivent les événements sur les éléments désactivés.
Modifié pour ajouter du contexte à partir du lien:
Le demandeur a trouvé ce fil avec une explication de la raison pour laquelle les événements ne s'enregistrent pas: http://www.webdeveloper.com/forum/showthread.php?t=186057
Firefox, et peut-être d'autres navigateurs, désactivent les événements DOM sur les champs de formulaire qui sont désactivés. Tout événement qui commence au champ de formulaire désactivé est complètement annulé et ne se propage pas dans l'arborescence DOM. Corrigez-moi si je me trompe, mais si vous cliquez sur le bouton désactivé, la source de l'événement est le bouton désactivé et l'événement de clic est complètement effacé. Le navigateur ne sait littéralement pas que le bouton a été cliqué, ni ne transmet l'événement click. C'est comme si vous cliquiez sur un trou noir sur la page Web.
La solution de contournement serait de styliser le bouton pour qu'il "ait l'air" désactivé, tout en ne l'étant pas.
Les éléments disabled
ne permettront pas à l'utilisateur d'interagir avec eux.
Donc: non, vous ne pouvez pas mettre un onclick
sur un bouton disabled
et vous attendre à ce qu'il se déclenche.
vous ne pouvez pas cliquer sur le bouton désactivé, mais vous pouvez cliquer sur le lien désactivé
$('.btn').on('click', function(e) {
e.preventDefault();
$txt = $('div.text');
if($(this).attr('disabled')){
$txt.html('CLICKED, BUT DISABLED!!');
}else{
$txt.html('Not disabled. =)');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="text">No action</div>
<input type="button" href="" class="btn" value="click" />
<input type="button" href="" class="btn" value="click disabled" disabled />
<a href="" class="btn">Click</a>
<a href="" class="btn" disabled>Click Disabled</a>
<input id="idButton" type="button" value="click" disabled>
$('#idButton').on('click', function() {
// The button is disabled but this will be executed.
});
L'exemple ci-dessus fonctionne avec JQuery pour les boutons désactivés qui ont besoin que l'événement soit capturé.
Qu'en est-il d'envelopper le bouton dans un élément et de cliquer sur cet élément?
<span id="container">
<input type="button" value="click" disabled>
</span>
Javascript:
$("#container").click(function(){
alert("Element clicked!");
})