Je viens d'écrire un plugin jQuery pour ce faire qui fonctionne dans tous les principaux navigateurs. Il utilise keydown et keypress pour lier les écouteurs d'événement à un ensemble d'éléments. Les écouteurs d'événement empêchent le comportement par défaut de la touche Tab, tandis que le module d'écoute keydown
insère également manuellement un caractère de tabulation sur le signe insertion/sélection.
Ici, il est en action: http://www.jsfiddle.net/8segz/
Voici un exemple d'utilisation:
$(function() {
$("textarea").allowTabChar();
});
Voici le plug-in code:
(function($) {
function pasteIntoInput(el, text) {
el.focus();
if (typeof el.selectionStart == "number") {
var val = el.value;
var selStart = el.selectionStart;
el.value = val.slice(0, selStart) + text + val.slice(el.selectionEnd);
el.selectionEnd = el.selectionStart = selStart + text.length;
} else if (typeof document.selection != "undefined") {
var textRange = document.selection.createRange();
textRange.text = text;
textRange.collapse(false);
textRange.select();
}
}
function allowTabChar(el) {
$(el).keydown(function(e) {
if (e.which == 9) {
pasteIntoInput(this, "\t");
return false;
}
});
// For Opera, which only allows suppression of keypress events, not keydown
$(el).keypress(function(e) {
if (e.which == 9) {
return false;
}
});
}
$.fn.allowTabChar = function() {
if (this.jquery) {
this.each(function() {
if (this.nodeType == 1) {
var nodeName = this.nodeName.toLowerCase();
if (nodeName == "textarea" || (nodeName == "input" && this.type == "text")) {
allowTabChar(this);
}
}
})
}
return this;
}
})(jQuery);
Vous êtes comme le Dr. Pepper lors d'une mauvaise journée. C'est génial. – Ciel
Bel extrait. Je sais que ça fait 4 ans mais ... comment ajouterais-tu cette action à l'historique des défaites? Le navigateur ne semble pas permettre de défaire des onglets involontaires en utilisant ce code. De plus, avec 'div [contenteditable]', l'élément ne semble pas avoir défini 'selectionStart' ou' document.selection'. Y at-il une solution de contournement pour "contenteditable"? Y a-t-il une idée plus détaillée de ce que vous connaissez? Merci d'avance. – philtune