Comme il existe de nombreuses opérations pour obtenir et définir la position du curseur, plusieurs fonctions d'outils présentées dans le blog précédent sont utilisées.
//Obtenir la position du curseur
fonction getCursor(elem) {
//IE 9, 10, autres navigateurs
Si (elem.selectionStart !== non défini) {
return elem.selectionStart;
} autre { //IE 6,7,8
var range = document.selection.createRange();
range.moveStart("character", -elem.value.length);
var len = range.text.length;
retourner len ;
>
>
//Définir la position du curseur
fonction setCursor(elem, index) {
//IE 9, 10, autres navigateurs
Si (elem.selectionStart !== non défini) {
elem.selectionStart = index;
elem.selectionEnd = index;
} autre { //IE 6,7,8
var range = elem.createTextRange();
Range.moveStart("character", -elem.value.length); //Déplacez la bordure gauche jusqu'au point de départ
range.move("character", index); //Le curseur est placé à la position de l'index
range.select();
>
>
//Obtenir le texte sélectionné
fonction getSelection(elem) {
//IE 9, 10, autres navigateurs
Si (elem.selectionStart !== non défini) {
return elem.value.substring(elem.selectionStart, elem.selectionEnd);
} autre { //IE 6,7,8
var range = document.selection.createRange();
return range.text;
>
>
//Définissez la plage sélectionnée
function setSelection(elem, leftIndex, rightIndex) {
If (elem.selectionStart !== undefined) { //IE 9, 10, autres navigateurs
elem.selectionStart = leftIndex;
elem.selectionEnd = rightIndex;
} autre { //IE 6,7,8
var range = elem.createTextRange();
range.move("character", -elem.value.length); //Le curseur se déplace à la position 0.
//Ici doit être moveEnd d'abord, puis moveStart
//Parce que si la bordure gauche est définie pour être plus grande que la bordure droite, le navigateur rendra automatiquement la bordure droite égale à la bordure gauche.
range.moveEnd("character", rightIndex);
range.moveStart("character", leftIndex);
range.select();
>
>
--------------- Boum ---
Parlons d’abord des idées principales. En fait, vous pouvez faire un dessin ici, mais je ne sais pas comment le dessiner. S'il vous plaît, donnez-moi votre avis.
Recherchez d’abord l’élément portant le nom de classe hhm-dateInputer.
Liez-y deux fonctions de gestion d'événements. touche enfoncée, mise au point, flou
concentrer
Déterminez si le contenu de l'élément d'entrée est vide, puis définissez sa valeur initiale sur "____-__-__"
flou (Grâce aux suggestions des amis dans les commentaires ci-dessous, cet événement sera encore plus parfait)
Déterminez si le contenu de l'élément d'entrée est la valeur initiale "____-__-__", définissez sa valeur sur vide ""
touche enfoncée
Pourquoi pas keyup, mais keydown : Nous savons que lorsque l'événement keydown se produit, les caractères du clavier n'ont pas encore été saisis dans la zone de saisie, ce qui est très important. Si nécessaire, nous pouvons empêcher la saisie de caractères inappropriés dans le programme.
1. Obtenez d'abord la valeur keyCode de l'événement de l'objet événement lorsqu'il est jugé qu'il s'agit d'un nombre, supprimez un soulignement après le nombre.
2. Lorsque la valeur keyCode représente la suppression de la clé, supprimez le numéro et ajoutez un soulignement.
3. KeyCode renvoie false dans les autres cas, empêchant la saisie de caractères.
La fonction setTimeout sera utilisée dans les première et deuxième étapes ci-dessus pour effectuer certaines opérations. Cette fonction est utilisée car les caractères clés de l'événement keyup n'ont pas réellement été appliqués à la zone de texte. L'opération dans setTimeout peut résoudre ce problème.
De plus, il existe une méthode très importante resetCursor dans le code. Cette méthode est appelée plusieurs fois dans le programme pour placer le curseur à la position de saisie appropriée.
//Placez le curseur à la bonne position
fonction resetCursor(elem) {
var valeur = elem.value;
var index = valeur.longueur;
//Lorsque l'utilisateur sélectionne et supprime du texte, le contenu ne peut être défini qu'au format initial.
Si (elem.value.length !== dateStr.length) {
elem.value = dateStr;
>
//Placez le curseur devant le premier _underline
//Si aucun soulignement n'est trouvé, mettez-le à la fin
var temp = valeur.search(/_/);
Indice = temp > -1 ? temp : index;
setCursor(elem, index);
>
$(fonction(){
var inputs = $(".hhm-dateInputer");
var dateStr = "____-__-__";
inputs.each(function(index,elem){
var input = $(this);
input.on("keydown",function(event){
var that = this ; //La zone de saisie qui déclenche actuellement l'événement.
var key = event.keyCode;
var curseurIndex = getCursor(that);
à
Si(clé >= 48 && clé <= 57){
//Si le curseur est à la fin de la date ou que le caractère suivant du curseur est "-", renvoie false pour empêcher l'affichage du caractère.
If(cursorIndex == dateStr.length || that.value.charAt(cursorIndex) === "-") {return false;}
//Lorsqu'il n'y a pas de soulignement dans la chaîne, renvoie false
If(that.value.search(/_/) === -1){return false;}
var fron = that.value.substring(0,cursorIndex); //Texte avant le curseur
var reg = /(d)_/;
setTimeout(function(){ //Les caractères ont été saisis dans le texte après setTimeout
//Texte après le curseur
var end = that.value.substring(cursorIndex,that.value.length);
//Supprimez le trait de soulignement après le numéro nouvellement inséré_
That.value = front end.replace(reg,"$1");
resetCursor(that);
},1);
return true ;
//Touche de suppression "Retour arrière"
}else if(key == 8){
// ne peut pas être supprimé lorsque le curseur est au premier plan. Mais pensez à la suppression lorsque tout le texte est sélectionné
If(!cursorIndex && !getSelection(that).length){ return false;}
//Gestion des traits de soulignement rencontrés lors de la suppression
If(that.value.charAt(cursorIndex -1) == "-"){
var ar = that.value.split("");
ar.splice(cursorIndex-2,1,"_");
That.value = ar.join("");
resetCursor(that);
return false ;
} setTimeout(function(){
//Réinitialiser lorsque la valeur est vide
Si(that.value === "") {
That.value = "____-__-__";
resetCursor(that);
}
//La position supprimée est soulignée
var curseur = getCursor(that);
var ar = that.value.split("");
ar.splice(cursor,0,"_");
That.value = ar.join("");
resetCursor(that);
},1);
return true ;
}
return false ;
});
input.on("focus",function(){
Si(!this.value){
This.value = "____-__-__";
}
resetCursor(this);
});
input.on("flou",function(){
Si(this.value === "____-__-__"){
This.value = "";
}
});
});
//Placez le curseur à la bonne position
Fonction resetCursor(elem){
var valeur = elem.value;
var index = valeur.longueur;
//Lorsque l'utilisateur sélectionne et supprime du texte, le contenu ne peut être défini qu'au format initial.
Si(elem.value.length !== dateStr.length){
elem.value = dateStr;
>
var temp = value.search(/_/);
index = temp>
setCursor(elem,index);
//Placez le curseur devant le premier _underline
//Si aucun soulignement n'est trouvé, mettez-le à la fin
>
});
fonction getCursor(elem){
//IE 9, 10, autres navigateurs
Si(elem.selectionStart !== non défini){
return elem.selectionStart;
} autre{ //IE 6,7,8
var range = document.selection.createRange();
range.moveStart("character",-elem.value.length);
var len = range.text.length;
retourner len;
>
>
fonction setCursor(elem,index){
//IE 9, 10, autres navigateurs Si(elem.selectionStart !== non défini){
elem.selectionStart = index;
elem.selectionEnd = index;
} autre{//IE 6,7,8
var range = elem.createTextRange();
Range.moveStart("character",-elem.value.length); //Déplacez la bordure gauche jusqu'au point de départ
range.move("character",index); //Placez le curseur à la position d'index
range.select();
>
>
fonction getSelection(elem){
//IE 9, 10, autres navigateurs
Si(elem.selectionStart !== non défini){
return elem.value.substring(elem.selectionStart,elem.selectionEnd);
} autre{ //IE 6,7,8
var range = document.selection.createRange();
return range.text;
>
>
fonction setSelection(elem,leftIndex,rightIndex){
If(elem.selectionStart !== undefined){ //IE 9, 10, autres navigateurs
elem.selectionStart = leftIndex;
elem.selectionEnd = rightIndex;
} autre{//IE 6,7,8
var range = elem.createTextRange();
range.move("character",-elem.value.length); //Le curseur se déplace à la position 0.
//Ici doit être moveEnd d'abord, puis moveStart
//Parce que si la bordure gauche est définie pour être plus grande que la bordure droite, le navigateur rendra automatiquement la bordure droite égale à la bordure gauche.
Range.moveEnd("character",rightIndex);
Range.moveStart("character",leftIndex);
range.select();
>
>
Conclusion
Ce plug-in peut encore comporter certains domaines qui doivent être améliorés.
Absence d'interface pour lier ce plug-in à des éléments via des appels js
Le plug-in peut avoir quelques bugs
Si vous rencontrez des problèmes avec le code ci-dessus, n'hésitez pas à me le faire savoir.
Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn