11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'explique un peu mon script. J'ai un champ texte, celui-ci permet de séléctionner du texte. Une fois le texte séléctionné j'ouvre une fenêtre qui permet de choisir un article par la liste. Je clique sur lier et la fenêtre doit se fermer et mettre du code wiki entre le texte séléctionné.

Jusque là aucun problème, ça fonctionne super sur FireFox, malheureusement j'ai quelques petit problèmes avec Internet Explorer, on dirait que celui-ci ne mémorise pas le texte séléctionné si on ouvre une popup, et tant qu'elle est ouverte ça ne fonctionne pas. Pour tant si je séléctionne du texte et que je reste sur la page ça fonctionne.

Est-ce que quelqu'un aurait une idée, ou à déjà fait un script du genre ?

Merci d'avance.
Bonjour,
as-tu un petit bout de script ?

Je pense qu'il doit s'agir d'un truc du style :


var range = document.selection.createRange();
var field = document.getElementById('mon_input');
range.moveToElement(field);
range.text = "[ xxx]" + range.text + "[/xxx]";


<edit>
Alors là, c'est pas possible, ce forum doit avoir un bug. J'ai dû rajouter un espace avant le xxx entre crochets, donc
[ xxx] au lieu de Smiley xxx que j'avais mis initialement.
Or, il n'exise pas de smiley dont le nom est "xxx" (avec un "lol" ou un "sourire" j'aurais compris, mais "xxx" ?)

Merci au modérateur qui pourra m'en dire un peu plus là-dessus.
</edit>
Modifié par QuentinC (01 Oct 2005 - 17:32)
En fait j'utilise une fonction que dotclear utilise, la voici

	function encloseSelection(prefix, suffix, fn) {
		//alert("Après j'arrive ici..");
		textarea.focus();
		var start, end, sel, scrollPos, subst;
		
		if (typeof(document["selection"]) != "undefined") {
			sel = document.selection.createRange().text;
		} else if (typeof(textarea["setSelectionRange"]) != "undefined") {
			start = textarea.selectionStart;
			end = textarea.selectionEnd;
			scrollPos = textarea.scrollTop;
			sel = textarea.value.substring(start, end);
		}
		
		if (sel.match(/ $/)) { // exclude ending space char, if any
			sel = sel.substring(0, sel.length - 1);
			suffix = suffix + " ";
		}
		//alert(sel);
		//alert(typeof(fn));
		if (typeof(fn) == 'function') {
			var res = (sel) ? fn(sel) : fn('');
		} else {
			var res = (sel) ? sel : '';
		}
		
		subst = prefix + res + suffix;
		
		if (typeof(document["selection"]) != "undefined") {
			var range = document.selection.createRange().text = subst;
			textarea.caretPos -= suffix.length;
		} else if (typeof(textarea["setSelectionRange"]) != "undefined") {
			textarea.value = textarea.value.substring(0, start) + subst +
			textarea.value.substring(end);
			if (sel) {
				textarea.setSelectionRange(start + subst.length, start + subst.length);
			} else {
				textarea.setSelectionRange(start + prefix.length, start + prefix.length);
			}
			textarea.scrollTop = scrollPos;
		}
		//alert(document.selection.createRange().text);
	}


Et le code qui crée le wiki code est celui-ci :
	function insInLink(src) {
		var href = src;
		encloseSelection('','',
						 function(str){
							 return '['+str+'|'+href+'|fr]';
						 });
	}


Tout va bien, sauf dans la première fonction, la variable sel n'a rien du tout, alors qu'avec firefox elle contient la séléction.

Merci d'avance.
IL faudrait s'assurer que le textarea reprend bien le focus à la fermeture de la popup, je pense que le problème vient de là.
QuentinC, j'ai essayer en donnant d'abord le focus à la page puis de fermer la fenêtre, ça change rien... Normalement le textarea doit avoir le focus vu qu'avec le système d'image ça fonctionne très bien. Smiley decu
Bonjour,
Il y a probablement un pblème de focus comme le signale Quentinc, mais à part cela, elle me parait bien compliquée ta sélection de texte et ne doit pas fonctionner sur IE/Mac,Opéra,Mozilla,Icab,ext ...
Connais-tu la solution de quirsmode ?
C'est celle qui est utilisée dans dotclear, donc elle fonctionne très bien. Maintenant pour le focus, je dois le donner avant de fermer la fenêtre. je vais essayer.
En tout cas pour ce que j'en dis, il me semble plus logique de donner le focus après avoir fermé la fenêtre.
Car quand la fenêtre est ouverte, il ne peut pas y avoir de focus dans la fenêtre de départ.
J'ai bien voulue essayer de fermer la fenêtre avant de donner le focus, unique problème. Ma fenêtre se nomme dc_popup, et quand je met un dc_popup.close(); IE me dit qu'il n'est pas défini.
[HS]@QuentinC> Pour le [ xxx] : Il a existé, dans des temps reculés, un smiley un peu, disons, spécial Smiley belle Smiley xrated . Mais depuis que le forum est public, Dew l'a désactivé Smiley police . Il n'apparaît dès lors plus que pour les membres de plus de 18 ans.

Smiley sm Smiley nono Smiley quickdraw




Smiley dehors
[/HS]