7
votes

Conversion de la plage en entrée

Je développe une application Web, j'ai une telle exigence que chaque fois que l'utilisateur clique sur texte intérieure interface J'ai besoin convert dans Champ d'entrée et sur flou J'ai besoin de le reconvertir à nouveau. Donc, j'utilise le script suivant dans l'une de mes pages JSP.

script Java: xxx

code JSP: xxx < P> Maintenant, mon problème est que tout fonctionne bien pour la première fois. Je veux dire chaque fois que je clique sur le texte à l'intérieur de la plage pour la première fois Il convertit dans le champ de saisie et encore Onblur IT correspond à l'arrière du champ de saisie au texte normal. Mais si vous essayez à nouveau de le faire, cela ne fonctionnera pas. Quel est le problème avec le script ci-dessus?


1 commentaires

Il y a aussi des plugins JQuery pour "Modifier en place": Stackoverflow.com/Questtions/708801/...


5 Réponses :


1
votes

Tout d'abord, vous devez modifier votre gestionnaire de clic pour utiliser live () aussi. Vous devriez prendre note, cependant, que live () a été obsolète depuis un certain temps maintenant. Vous devriez utiliser on () dans les deux cas à la place.

Deuxièmement, lorsque vous remplacez l'entrée par la portée, vous ne donnez pas à l'élément un identifiant. Par conséquent, l'élément ne correspond plus au sélecteur pour votre gestionnaire de clic.

Personnellement, je prendrais complètement une approche différente (et plus simple). J'aurais à la fois la portée et dans l'entrée de mon balise côte à côte. On serait caché pendant que l'autre est montré. Cela vous donnerait moins de chance de faire des erreurs lorsque vous essayez de recréer des éléments DOM et d'améliorer les performances puisque vous ne devez pas constamment ajouter / supprimer des éléments du DOM.


2 commentaires

"Par conséquent, l'élément ne correspond plus au sélecteur de votre gestionnaire de clic" - qui cliquez sur le gestionnaire? Covertspan est appelé une seule fois et je ne vois aucune autre pièce jointe du gestionnaire de clic.


Pas une mauvaise idée! Je dois essayer quelque temps.



1
votes

Je comprends que vous pensez que le remplacement de l'élément est une bonne chose, cependant, j'utiliserais une invite pour obtenir le texte. Pourquoi? Il est beaucoup plus facile et un peu plus jolie pour l'utilisateur. Si vous êtes curieux sur la façon de le faire, je vous montre.

html: xxx

js: xxx

http://jsfiddle.net/qjxhv/1/


0 commentaires

17
votes

serait bon de changer votre structure DOM à quelque chose comme ceci (notez que la portée et l'entrée sont côte à côte et dans un parent partagé .inputwitch xxx < P> Ensuite, nous pouvons faire notre JS comme celui-ci, il prendra en charge la sélection de la sélection et de la tabulation pour accéder à la plage / entrée suivante / précédente: http://jsfiddle.net/x33gz6z9/ xxx


2 commentaires

J'ai un problème maintenant, après avoir mis à jour ma version de jQuery, le code ci-dessus ne fonctionne pas.


Quelle version? Je viens de le courir en 2.0 et 2.x (Edge) et ça a fonctionné bien. Qu'est-ce qui se passe? Des erreurs montrant dans la console?



0
votes

Une version plus générique de La réponse excellente de SMERNY avec des identifiaires peut être faite en modifiant légèrement deux lignes: $ INPUT.ATTR ("ID", "LOADNUM"); devient $ entrée.Attr ("ID", $ ("ID")); - De cette façon, cela prend simplement l'identifiant actuel et le garde, quoi que ce soit.

De même, $ span.attr ("id", "loadnum"); devient $ span.attr ("id", $ (this) .attr ("id"));

Cela permet simplement d'appliquer les fonctions à n'importe quelle div. Avec deux lignes similaires ajoutées, les deux identifiants et la classe fonctionnent bien. Voir exemple .


0 commentaires

0
votes

J'ai fait peu de changement de code, en utilisant ce type d'entrée ne peut pas être vide, il reviendra à sa valeur réelle. XXX

JSFIDDLE: - https://jsfiddle.net/svsp3wql/


0 commentaires