IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

[Archive Faq] Les propositions qui ont été traitées


Sujet :

jQuery

  1. #21
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je surligner des mots identiques ?
    [FAIT] [jQuery 1.5] [2011-02-02]

    Comment puis-je surligner des mots identiques ?

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		/* Base */
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal;
    		font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
    		div#conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF;
    		color:#000000; border:1px solid #666666; }
     
    		/* Test */
    		li {
    			margin-left:24px;
    		}
    		span.surligne {
    			background-color:#FFFF00;
    		}
    	</style>
    </head>
    <body>
    	<h1>FAQ jQuery</h1>
    	<div id="conteneur">
    		<p>
    			Vestibulum ac nisl sit amet odio lobortis pellentesque. Quisque eu nisl. In ipsum metus, congue in, porta non, luctus ac, dolor. Ut suscipit, metus id blandit scelerisque, dolor nunc varius velit, sit amet feugiat magna neque ut lorem. Ut ut lacus. Curabitur eget magna iaculis tellus pulvinar sagittis. Maecenas eget urna. Nunc scelerisque, justo ultricies luctus consectetur, enim ante aliquam urna, sed ullamcorper quam orci nec arcu. Sed volutpat ligula quis elit. Donec vitae neque vel ipsum ultricies accumsan. Aenean imperdiet tincidunt augue. Morbi elementum metus a dui. Nunc non turpis. Maecenas vel odio non justo bibendum varius. Morbi tincidunt orci et purus. Duis mattis ullamcorper odio.			
    		</p>
    		<ul>
    			<li>
    				Vestibulum ac nisl sit amet odio lobortis pellentesque. Quisque eu nisl. In ipsum metus, congue in, porta non, luctus ac, dolor. Ut suscipit, metus id blandit scelerisque, dolor nunc varius velit, sit amet feugiat magna neque ut lorem. Ut ut lacus. Curabitur eget magna iaculis tellus pulvinar sagittis. Maecenas eget urna. Nunc scelerisque, justo ultricies luctus consectetur, enim ante aliquam urna, sed ullamcorper quam orci nec arcu. Sed volutpat ligula quis elit. Donec vitae neque vel ipsum ultricies accumsan. Aenean imperdiet tincidunt augue. Morbi elementum metus a dui. Nunc non turpis. Maecenas vel odio non justo bibendum varius. Morbi tincidunt orci et purus. Duis mattis ullamcorper odio.
    				<ul>
    					<li>
    						Vestibulum ac nisl sit amet odio lobortis pellentesque. Quisque eu nisl. In ipsum metus, congue in, porta non, luctus ac, dolor. Ut suscipit, metus id blandit scelerisque, dolor nunc varius velit, sit amet feugiat magna neque ut lorem. Ut ut lacus. Curabitur eget magna iaculis tellus pulvinar sagittis. Maecenas eget urna. Nunc scelerisque, justo ultricies luctus consectetur, enim ante aliquam urna, sed ullamcorper quam orci nec arcu. Sed volutpat ligula quis elit. Donec vitae neque vel ipsum ultricies accumsan. Aenean imperdiet tincidunt augue. Morbi elementum metus a dui. Nunc non turpis. Maecenas vel odio non justo bibendum varius. Morbi tincidunt orci et purus. Duis mattis ullamcorper odio.
    					</li>
    				</ul>
    			</li>
    		</ul>
    		<p>
    			Vestibulum ac nisl sit amet odio lobortis pellentesque. Quisque eu nisl. In ipsum metus, congue in, porta non, luctus ac, dolor. Ut suscipit, metus id blandit scelerisque, dolor nunc varius velit, sit amet feugiat magna neque ut lorem. Ut ut lacus. <span>Vestibulum ac nisl sit amet odio lobortis pellentesque. Quisque eu nisl. In ipsum metus, congue in, porta non, luctus ac, dolor. Ut suscipit, metus id blandit scelerisque, dolor nunc varius velit, sit amet feugiat magna neque ut lorem. Ut ut lacus. Curabitur eget magna iaculis tellus pulvinar sagittis. Maecenas eget urna. Nunc scelerisque, justo ultricies luctus consectetur, enim ante aliquam urna, sed ullamcorper quam orci nec arcu. Sed volutpat ligula quis elit. Donec vitae neque vel ipsum ultricies accumsan. Aenean imperdiet tincidunt augue. Morbi elementum metus a dui. Nunc non turpis. Maecenas vel odio non justo bibendum varius. Morbi tincidunt orci et purus. Duis mattis ullamcorper odio.</span> Curabitur eget magna iaculis tellus pulvinar sagittis. Maecenas eget urna. Nunc scelerisque, justo ultricies luctus consectetur, enim ante aliquam urna, sed ullamcorper quam orci nec arcu. Sed volutpat ligula quis elit. Donec vitae neque vel ipsum ultricies accumsan. Aenean imperdiet tincidunt augue. Morbi elementum metus a dui. Nunc non turpis. Maecenas vel odio non justo bibendum varius. Morbi tincidunt orci et purus. Duis mattis ullamcorper odio.			
    		</p>
    	</div> 
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script>
    	<script>
    		$(function(){
    			// Comment puis-je surligner des mots identiques ?
    			var surligner = function(id, str, surligneClass){
    				$("#"+id).children().each(function(i, item){
    					$(item).html($(item).html().replace(str, "<span class='" + surligneClass +"'>" + str + "</span>", "gim"));
    				});
    			};
     
    			surligner("conteneur", "Morbi", "surligne");
    		});
     	</script>
    </body>  
    </html>

  2. #22
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut Est-il toujours utile de tester la longueur d'un sélecteur jQuery ?
    [FAIT] [jQuery 1.4.4] [2010-12-05]

    Est-il toujours utile de tester la longueur d'un sélecteur jQuery ?

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($(".maclasse").length > 0) {
       $(".maclasse").css('color','blue');
    }
    Pour cet usage, non ! Le sélecteur est un objet jQuery qui peut être manipulé comme un "array" d'objets. Si le tableau est vide, jQuery n'exécute pas la méthode demandée.

    Il suffit donc d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(".maclasse").css('color','blue');

  3. #23
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Quelle différence y a-t-il entre $(...)[0] et $(...).eq(0) ?
    [FAIT] [jQuery 1.4.4] [2011-01-19]

    Quelle différence y a-t-il entre $(...)[0] et $(...).eq(0) ?

    La différence est très importante et elle est souvent mal comprise.

    Un sélecteur retourne toujours un objet jQuery, c'est la raison pour laquelle on peut chaîner les instructions.

    Mais un sélecteur peut être traité comme un tableau (array) pour retrouver l'élément du DOM et, par exemple, utiliser les propriétés et méthodes du JavaScript qui n'ont pas d'équivalent dans le langage jQuery.

    Exemple :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <select id="choix">
    	<option value="1" selected="selected">Choix n° 1</option>
    	<option value="2">Choix n° 2</option>
    	<option value="3">Choix n° 3</option>
    	<option value="4">Choix n° 4</option>
    	<option value="5">Choix n° 5</option>
    </select>

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    $(function(){
    	// Nous utiliserons Firebug pour examiner le résultat de nos codes
     
    	// $(...) = [object Object]
    	console.log("$(...) = " + $("#choix"));
     
    	// $(...).eq(0) = [object Object]
    	console.log("$(...).eq(0) = " + $("#choix").eq(0));
     
    	// $(...)[0] = [object HTMLSelectElement]
    	console.log("$(...)[0] = " + $("#choix")[0]);
     
    	$("#choix").children().eq(2).css("color", "red");
     
    	// $("#choix").children().eq(2) = [object Object]
    	console.log('$("#choix").children().eq(2) = ' + $("#choix").children().eq(2));
     
    	// eq(2) est la troisième option, valeur 3
    	console.log($("#choix").children().eq(2).val());
     
    	// $("#choix").children()[4] = [object HTMLOptionElement]
    	console.log('$("#choix").children()[4] = ' + $("#choix").children()[4]);
     
    	// $("#choix").children()[4].tagName = OPTION
    	console.log('$("#choix").children()[4].tagName = ' + $("#choix").children()[4].tagName);
     
    	// $("#choix").children().eq(4).tagName = undefined
    	// undefined car l'objet jQuery n'a pas une propriété tagName
    	console.log('$("#choix").children().eq(4).tagName = ' + $("#choix").children().eq(4).tagName);
    });

  4. #24
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Exemples d'utilisation de jQuery.sub()
    [FAIT] [jQuery 1.5] [2011-02-04]

    Exemples d'utilisation de jQuery.sub()

    Crée une copie de l'objet jQuery. Les propriétés et les méthodes de la copie peuvent être modifiées sans affecter l'original.

    Notez bien que toutes les méthodes de la copie pointent toujours vers l'objet original. La gestion des événements se fait toujours à travers l'original, de même pour la gestion des données (data). Les requêtes Ajax et les événements se dérouleront toujours par l'intermédiaire de l'objet jQuery original.

    Il y a deux cas d'utilisation spécifiques pour lesquels $.sub() a été créé :
    • fournir un moyen facile pour modifier les méthodes jQuery sans détruire complètement les méthodes d'origine ;
    • donner un moyen pour faciliter l'encapsulation et pour définir un espace de noms pour les plugins jQuery.


    On travaille à l'intérieur d'une clôture jQuery.sub().
    Voir : Clôturez jQuery !

    Exemple 1 : Ajout d'une méthode à une copie de jQuery pour qu'elle ne soit pas disponible en dehors de la copie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta http-equiv="X-UA-Compatible" content="chrome=1">
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal;
    		font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
    		div#conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF;
    		color:#000000; border:1px solid #666666; }
     
    		/* TEST */
    	</style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<div id="conteneur">
     
    	</div>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script>
    	<script>
    		/*
    		 * On travaille à l'intérieur d'une clôture jQuery.sub()
    		 *
    		 * Voir : Clôturez jQuery ! http://danielhagnoul.developpez.com/fondations/cloturer.php
    		 */
    		(function($){
    			$.fn.myCustomMethod = function(){
    				$(this).append("<p>Un mot pour remplir</p>");
    			};
     
    			$(function() {
    				$("#conteneur").myCustomMethod();
     
    				// function
    				console.log(typeof $().myCustomMethod);
    			});
    		})(jQuery.sub());
     
    		$(function(){
     
    			// undefined
    			console.log(typeof $().myCustomMethod);
     
    		});
    	</script>
    </body>  
    </html>
    Exemple 2 : Compléter des méthodes jQuery pour fournir de nouvelles fonctionnalités.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta http-equiv="X-UA-Compatible" content="chrome=1">
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal;
    		font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
    		div#conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF;
    		color:#000000; border:1px solid #666666; }
     
    		/* TEST */
    	</style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<div id="conteneur">
    		<button id="dvjhBtn">Go</button>
    		<p class="dvjhClassA">Un mot pour remplir</p>
    		<p class="dvjhClassB">Un mot pour remplir</p>
    	</div>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script>
    	<script>
    		/*
    		 * On travaille à l'intérieur d'une clôture jQuery.sub()
    		 *
    		 * Voir : Clôturez jQuery ! http://danielhagnoul.developpez.com/fondations/cloturer.php
    		 */
    		(function($){
    			/*
    			 * L'objet jQuery original ne déclenche pas un
    			 * événement "remove" lors de la suppression
    			 * d'un élément. Cette fonctionnalité est
    			 * uniquement contenue dans cette copie.
    			 */
    			$.fn.remove = function() {
    				//  Nouvelle fonctionnalité: déclenchement de l'événement remove
    				this.trigger("remove");
     
    				// Vous devez toujours appelez la méthode originale
    				return jQuery.fn.remove.apply( this, arguments );
    			};
     
    			$(function() {
    				$("#dvjhBtn").click(function() {
    					$(this).parent().children(".dvjhClassA").remove();
    				});
     
    				// On attache l'événement remove a la division d'id conteneur
    				$("#conteneur").bind("remove", function(e) {
    					console.log(e.target);
    				});
    			});
    		})(jQuery.sub());
     
    		$(function(){
     
    		});
    	</script>
    </body>  
    </html>
    Exemple 3 : Créer un plugin qui retourne des méthodes spécifiques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta http-equiv="X-UA-Compatible" content="chrome=1">
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal;
    		font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
    		div#conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF;
    		color:#000000; border:1px solid #666666; }
     
    		/* TEST */
    		.dvjhDisplayPlugin {
    			background-color:lightgreen;
    		}
    	</style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<div id="conteneur">
    		<button id="dvjhBtnID">On/Off</button>
    		<div>
    			<p class="dvjhClassA">Un mot pour remplir</p>
    			<p class="dvjhClassB">Un mot pour remplir</p>
    		</div>
    	</div>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script>
    	<script>
    		/*
    		 * On travaille à l'intérieur d'une clôture jQuery.sub()
    		 *
    		 * Voir : Clôturez jQuery ! http://danielhagnoul.developpez.com/fondations/cloturer.php
    		 */
    		(function($){
    			// Ajouter deux nouvelles méthodes au plugin
    			$.fn.extend({
    				open: function(){
    					return this.show();
    				},
    				close: function(){
    					return this.hide();
    				}
    			});
     
    			// Ajouter notre plugin sur l'objet jQuery original et lui donner un nom
    			jQuery.fn.dvjhDisplay = function(){
    				this.addClass("dvjhDisplayPlugin");
     
    				// Pour maintenir la chainabilité, nous devons toujours retourner notre plugin
    				return $(this);
    			};
    		})(jQuery.sub());
     
    		$(function(){
    			// on utilise le plugin dvjhDisplay sur la division qui suit notre bouton On/Off
    			$("#dvjhBtnID").toggle(
    				function(){
    					$(this).next().dvjhDisplay().close();
    				},
    				function(){
    					$(this).next().dvjhDisplay().open();
    				}
    			);
    		});
    	</script>
    </body>  
    </html>

  5. #25
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je écrire un plugin ?
    [FAIT] [jQuery 1.5.1] [2011-03-22]

    Comment puis-je écrire un plugin ?

    Ce n'est pas une tâche anodine, s'y atteler sans maîtriser les bases (CSS, HTML, DOM, JavaScript, JSON, jQuery, et la gestion des événements) équivaut à partir en expédition dans la jungle amazonienne sans l'équipement adéquat.

    Vous ne trouverez donc ci-dessous aucune explication sur les matières réputées connues.

    Un plugin nécessite généralement une méthode principale, une méthode pour modifier la valeur des options et une méthode pour connaître la valeur des options, ainsi que des méthodes privées pour la gestion des événements provoqués par la méthode principale du plugin, par le changement de valeur d'une option et par les actions de l'utisateur du plugin.

    La gestion du contexte de this pose les problèmes habituels. Lors du traitement des événements générés par l' utilisateur, il faut se rappeler que l'élément activé par l'utilisateur est event.target.

    Deux méthodes sont utilisables :


    Voici le code de deux plugins utilisant jQuery.sub() : dvjhRotate et dvjhInputText. Les méthodes et objets privés commencent par un underscore (souligné _).

    Le plugin dvjhRotate utilise la propriété CSS3 "transform" pour appliquer une rotation à un élément du DOM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta http-equiv="X-UA-Compatible" content="chrome=1">
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
            img {border:none; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
            ul,ol,dl {list-style:none; padding-left:6px; padding-top:6px; }
            li {padding-bottom:6px; }
    		.conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF; color:#000000; border:1px solid #666666; }
     
    		/* TEST */
    		#btnRotate {margin:12px; }
    		.divTest {width:400px; height:150px; margin:12px; padding:6px; border:1px solid grey; background-color:lightgreen; }
        </style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<section class="conteneur">
    		<button id="btnRotate">Tourne de 45 degrés !</button>
    		<div class="divTest">
    			<p>Un mot pour remplir</p>
    		</div>
    	</section>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
        <script>
    		(function($){
    			var _Options = {
    				degrees: 0,
    				debug: true
    			};
     
    			var _avecStyle = function(self, matrix){
    				self.attr("style", "-moz-transform:" + matrix +
    						  "; -webkit-transform:" + matrix +
    						  "; -ms-transform:" + matrix +
    						  "; -o-transform:" + matrix +
    						  "; transform:" + matrix +
    						  ";");
    			};
     
    			var _setDegrees = function(self, value){
    				var v = parseInt(value, 10) || 0;
     
    				if (v != _Options.degrees){
    					_Options.degrees = v;
     
    					var rad = v * Math.PI * 2.0 / 360.0,
    						costheta = Math.cos(rad),
    						sintheta = Math.sin(rad),
    						a = parseFloat(costheta, 10).toFixed(8),
    						c = parseFloat(-sintheta, 10).toFixed(8),
    						b = parseFloat(sintheta, 10).toFixed(8),
    						d = parseFloat(costheta, 10).toFixed(8),
    						matrix = "matrix(" + a + ", " + b + ", " + c + ", " + d + ", 0, 0);";
     
    					_avecStyle(self, matrix);
     
    					var optionsChangedEvent = new $.Event("optionsChanged");
     
    					optionsChangedEvent.dvjh = {
    						initiateur: self,
    						optionsKey: "degrees",
    						optionsValue: v
    					};
     
    					self.trigger(optionsChangedEvent);
    				}
    			};
     
    			$.fn.extend({
    				plugin: function(options){
    					var self = this;
     
    					if (_Options.debug){
    						self.bind("optionsChanged", function(event){
    							var obj = event.dvjh,
    								el = obj.initiateur[0];
     
    							console.log("L'option " +
    								  obj.optionsKey +
    								  " a pris la valeur " +
    								  obj.optionsValue +
    								  " le " +
    								  new Date(event.timeStamp).toLocaleString() +
    								  " a la demande de l'élément " +
    								  el.tagName +
    								  " , ID = " +
    								  el.id +
    								  " , Class = " +
    								  el.className);
    						});
    					}
     
    					if (options != undefined){
    						$.each(options, function(key, value){
    							self.pluginSetOptions(key, value);
    						});
    					} else {
    						// donner une valeur par défaut
    						self.pluginSetOptions("degrees", "45");
    					}
     
    					return this; // Indispensable !
    				},
    				pluginSetOptions: function(key, value){
    					switch(key){
    						case "degrees":
    							_setDegrees(this, value);
    							break;
    						default:
    							throw "L'option " + key + " n'existe pas";
    					};
    				},
    				pluginGetOptions: function(key){
    					switch(key){
    						case "degrees":
    							return _Options.degrees;
    							break;
    						default:
    							throw "L'option " + key + " n'existe pas";
    					};
    				}
    			});
     
    			jQuery.fn.dvjhRotate = function(options){
    				return $(this).plugin(options);
    			};
    		})(jQuery.sub());
     
    		$(function() {
    			$("#btnRotate").click(function(){
    				var objsRotate = $("div.divTest").dvjhRotate();
     
    				// objsRotate.pluginSetOptions("degrees", "-105");
    			});
    		});
    	</script>
    </body>  
    </html>
    Le plugin dvjhInputText agit sur des éléments INPUT de type texte qui afficheront alors une valeur comprise entre 0 à 100 %. Il gère les modifications apportées par l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta http-equiv="X-UA-Compatible" content="chrome=1">
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
            img {border:none; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
            ul,ol,dl {list-style:none; padding-left:6px; padding-top:6px; }
            li {padding-bottom:6px; }
    		.conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF; color:#000000; border:1px solid #666666; }
     
    		/* TEST */
    		#dvjhMessagesID {
    			width:auto;
    			margin:6px;
    			padding:6px;
    			font-family:sans-serif;
    			font-size:0.8em;
    			border:1px solid grey;
    		}
        </style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<section class="conteneur">
    		<input id="dvjhInputID" type="text"/>
    		<input class="dvjhClassTest" type="text"/>
    		<input type="text"/>
    		<div id="dvjhMessagesID"></div>
    	</section>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
        <script>
    		(function($){
    			var _Options = {
    				pourcentage: 0,
    				debug: true
    			};
     
    			var _PluginCSS = {
    				"width":"120px",
    				"height":"3em",
    				"margin":"6px",
    				"padding":"0.5em",
    				"background-color":"lightgreen"
    			};
     
    			var _avecStyle = function(self){
    				self.css(_PluginCSS);
    			}
     
    			var _setPourcentage = function(self, value){
                    var v = parseInt(value, 10) || parseInt(self.data("data-prevVal"), 10) || 0;
     
                    if (v > 100){
                        v = 100;
                    } else if (v < 0){
                        v = 0;
                    }
     
                    self.val((_Options.pourcentage = v) + "%");
                    self.data("data-prevVal", _Options.pourcentage);
     
                    var optionsChangedEvent = new $.Event("optionsChanged");
     
                    optionsChangedEvent.dvjh = {
                        initiateur: self,
                        optionsKey: "pourcentage",
                        optionsValue: v
                    };
     
                    self.trigger(optionsChangedEvent);
    			};
     
    			$.fn.extend({
    				plugin: function(options){
    					var self = this;
     
    					if (_Options.debug){
    						self.bind("optionsChanged", function(event){
    							var obj = event.dvjh,
    								el = obj.initiateur[0];
     
    							console.log("L'option " +
    								  obj.optionsKey +
    								  " a pris la valeur " +
    								  obj.optionsValue +
    								  " le " +
    								  new Date(event.timeStamp).toLocaleString() +
    								  " a la demande de l'élément " +
    								  el.tagName +
    								  " , ID = " +
    								  el.id +
    								  " , Class = " +
    								  el.className);
    						});
    					}
     
    					/*
    					 * L'utilisateur a cliqué sur l'input
    					 */
    					self.toggle(
    						function(){
    							$(this).css({
    								color: "blue",
    								fontWeight: "bold"
    							});
     
    							return false;
    						},
    						function(){
    							$(this).css({
    								color: "red",
    								fontWeight: "normal"
    							});
     
    							return false;
    						}
    					);					
     
    					/*
    					 * L'utilisateur modifie le contenu de l'input (event.target)
    					 */
    					self.bind("change", function(event){
    						_setPourcentage($(event.target), $(event.target).val());
    					});
     
    					/*
    					 * initialisation du plugin avec une valeur par défaut
    					 */
    					_avecStyle(self);
    					_Options.pourcentage = 50;
    					self.val(_Options.pourcentage + " %");
    					self.data("data-prevVal", _Options.pourcentage);
     
    					/*
    					 * options ?
    					 */
    					if (options != undefined){
    						$.each(options, function(key, value){
    							self.pluginSetOptions(key, value);
    						});
    					}
     
                        return this; // Indispensable !
    				},
    				pluginSetOptions: function(key, value){
    					switch(key){
    						case "pourcentage":
    							_setPourcentage(this, value);
    							break;
    						default:
    							throw "L'option " + key + " n'existe pas";
    					};
    				},
    				pluginGetOptions: function(key){
    					switch(key){
    						case "pourcentage":
    							return _Options.pourcentage;
    							break;
    						default:
    							throw "L'option " + key + " n'existe pas";
    					};
    				}
    			});
     
    			jQuery.fn.dvjhInputText = function(options){
    				return $(this).plugin(options);
    			};
    		})(jQuery.sub());
     
    		$(function(){
    			// var obj = $("input").dvjhInputText({"pourcentage": 12});
     
                var objsInput = $("input").dvjhInputText();
     
                console.log(objsInput.pluginGetOptions("pourcentage"));
     
                objsInput.eq(1).pluginSetOptions("pourcentage", 25);
     
                objsInput.eq(2).pluginSetOptions("pourcentage", 130);
     
                try {
                    objsInput.eq(0).pluginSetOptions("niveau", -12);
                }
                catch(er){
                    alert(er);
                }
    		});
        </script>
    </body>  
    </html>

  6. #26
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment dois-je formuler une requête AJAX ?
    [FAIT] [jQuery 1.5] [2011-02-06]

    Comment dois-je formuler une requête AJAX ?

    Les fonctions et les méthodes AJAX permettent d'échanger des données avec un serveur sans que le navigateur déclenche un rafraîchissement de la page web.

    En raison de restrictions de sécurité imposées par Cross-Origin Resource Sharing, les transactions AJAX sont soumises à la politique de même origine, la requête AJAX ne parvient pas à récupérer les données d'un autre domaine, d'un sous domaine, ou d'un autre protocole. Seules les transactions AJAX manipulant des scripts et du JSONP ne sont pas soumises à ces restrictions.

    Les méthodes $.get(), $.post(), $.getJSON(), $.getScript() et $(selector).load(), dont nous parlerons en dernier à cause de ses particularités, exécutent la majorité des transactions AJAX dont vous aurez besoin.

    Toutes ces méthodes AJAX (sauf load) retournent un objet "jqXHR" qui implémente l'interface "Promise".


    Définitions :

    jqXHR : l’objet "jqXHR" implémente l'interface "Promise". Cet objet contient les propriétés, méthodes et comportements d'une promesse et il permet d'enchaîner les fonctions de rappel (callback) "success", "error" et "complete".

    url : une chaîne de caractères contenant l'adresse web vers laquelle la demande est envoyée.

    yourData : un objet (map) ou une chaîne de caractères contenant vos données à envoyer au serveur avec la requête AJAX.

    Exemples et méthodes disponibles :
    • { name: "John", time: "2pm" } ;
    • { 'choices[]': ["Jon", "Susan"]} ;
    • $(selector).serializeArray() ; : encode un ensemble d'éléments sous forme d'un tableau de paires "key/value" ;
    • $(selector).serialize() : encode un ensemble d'éléments comme une chaîne de caractères ;
    • $.param(obj) : crée une représentation sérialisée d'un tableau ou d'un objet.


    dataReceived : les données retournées par le serveur. Suivant les méthodes, ces données ont déjà subi le traitement approprié.

    dataType : le type de données qui doit être retourné par le serveur. Par exemple : "xml", "html", "text".

    textStatus : une chaîne de caractères contenant le statut de la requête : "success", "notmodified", "error", "timeout", "abort", ou "parsererror".

    errorThrown : un objet optionnel soit nul, soit contenant dans un de ses arguments la valeur : "timeout", "error", "abort", ou "parsererror".


    Méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var jqXHR = $.get(url, [yourData], [success(dataReceived, textStatus, jqXHR)], [dataType]);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var jqXHR = $.post(url, [yourData], [success(dataReceived, textStatus, jqXHR)], [dataType]);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var jqXHR = $.getJSON(url, [yourData], [success(dataReceived, textStatus, jqXHR)]);
    $.getJSON() charge des données encodées au format JSON.

    Le paramètre "dataReceived" contiendra un objet JavaScript ou un tableau en fonction de la structure JSON reçue et de l'analyse réalisée par la méthode $.parseJSON().

    Si le fichier JSON contient une erreur de syntaxe, la demande échoue généralement sans signaler aucune erreur. Pour cette raison, évitez les fichiers JSON construits à la main s’ils n’ont pas été soumis à un vérificateur JSON. Par exemple JSV (JSON Schema Validator).

    JSON est un format d'échange de données avec des règles de syntaxe très strictes. Par exemple, toutes les chaînes représentées dans JSON, si elles sont des propriétés ou des valeurs, doivent être placées entre guillemets (double-quote, exemple : "hello"). Pour plus de détails sur le format JSON, voir http://json.org/.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var jqXHR = $.getScript(url, [success(dataReceived, textStatus)]);
    Cette méthode charge un fichier JavaScript et l'exécute.


    Exemple d’utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $.getJSON('dateJSON.js', function(data, textStatus, jqXHR) {
    	console.log(data, textStatus, jqXHR);
     
    	// succès de la transaction, on doit traiter le contenu de data
     
    }).error(function(jqXHR, textStatus, errorThrown){
    	console.log(jqXHR, textStatus, errorThrown);
     
    	// échec de la transaction, gérer la catastrophe
     
    }).complete(function(jqXHR, textStatus){
    	console.log(jqXHR, textStatus);
     
    	// la transaction s'est terminée par un succès ou par un échec
    });

    Cas particulier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var jQueryObject = $(selector).load(url, [yourData], [complete(dataReceived, textStatus, jqXHR)]);
    Cette méthode place les données chargées depuis le serveur dans l'élément du DOM correspondant au sélecteur.

    $(selector).load() ne retourne pas un objet jqXHR, ce qui interdit le chaînage des fonctions de rappel.

    La fonction de rappel "complete" est la seule qui soit disponible. Les données reçues (dataReceived) ont donc déjà été traitées.


    Pour les initiés :

    Les méthodes ci-dessus suffiront dans la majorité des cas. Pour des cas particuliers, les initiés utiliseront $.ajax() et en cas de besoin, ils pourront même modifier le protocole AJAX de jQuery en utilisant Extending AJAX.


    Nota Bene :

    À cause des restrictions imposées par : Cross-Origin Resource Sharing, sans un serveur pour donner les réponses attendues par le navigateur on n'obtient plus que des erreurs et des avertissements.

    Ainsi je n'arrive plus à travailler sur mon ordinateur avec un simple fichier JSON et une page HTML affichée dans Firefox 3.6.13 ou Chrome 9.0.597.86. Je suis obligé de sauvegarder la page web (qui ne contient pourtant que du code HTML) comme une page PHP et d’utiliser un serveur PHP (WampServer).

    Seules les transactions AJAX manipulant des scripts et du JSONP ne sont pas soumises à ces restrictions.

  7. #27
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je utiliser l’objet jQuery.Deferred ?
    [FAIT] [jQuery 1.6] [2011-05-09]

    Comment puis-je utiliser l’objet jQuery.Deferred ?

    Les objets différés (Deferred object) sont un moyen utile pour structurer votre code.

    Un objet différé est un objet :
    • qui permet de chaîner les instructions ;
    • qui peut prendre deux états (succès (done) ou échec (fail)) ;
    • qui gère une file d’attente de fonctions de rappel (callback) pour chacun de ses états ;
    • qui peut enregistrer plusieurs fonctions de rappel dans une file d’attente ;
    • qui, lorsque son état est déterminé (succès ou échec), exécute dans l’ordre d’insertion, chacune des fonctions de rappel contenues dans la file d’attente correspondant à son état.


    var objDif = $.Deferred() ; : crée un objet différé.

    objDif.done() : pour ajouter une fonction de rappel à la file d’attente qui sera appelée en cas de succès.

    objDif.fail() : pour ajouter une fonction de rappel à la file d’attente qui sera appelée en cas d’échec.

    objDif.always() : pour ajouter une fonction de rappel à la file d'attente qui sera toujours exécutée lorsque la promesse se réalisera par un succès ou par un échec.

    objDif.then(doneCallback, failCallback) : pour ajouter une fonction ou un tableau (array) de fonctions aux files d’attende.

    objDif.pipe( [ doneFilterFunction ], [ failFilterFunction ] ) : retourne une nouvelle promesse (un objet différé) qui filtre le statut et les valeurs de l'objet différé original au travers d'une fonction.

    objDif.resolve(arguments) : passe l’objet différé dans l’état « succès » ce qui déclenche l’activation de la file d’attende correspondante.

    objDif.reject(arguments) : passe l’objet différé dans l’état « échec » ce qui déclenche l’activation de la file d’attende correspondante.

    $.when(objDif1, objDif2) : génère un objet différé pour gérer le résultat final d’un ensemble d’objets différés, voir l’exemple.


    Exemple 1 : avec des objets différés globaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta http-equiv="X-UA-Compatible" content="chrome=1">
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal;
    		font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
    		div#conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF;
    		color:#000000; border:1px solid #666666; }
     
    		/* TEST */
    	</style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<div id="conteneur">
    		<p>Un mot pour remplir</p>
    	</div>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script>
    	<script>
    		$(function(){
    			/*
    			 * Cette fonction sera utilisée comme une fonction
    			 * de rappel qui sera appelée en cas de succès.
    			 */
    			var funcDone = function(){
    				console.log("C'est un succès !", arguments);
    			};
     
    			/*
    			 * Cette fonction sera utilisée comme une fonction
    			 * de rappel qui sera appelée en cas d'échec.
    			 */
    			var funcFail = function(){
    				console.log("C'est un échec !", arguments);
    			};
     
    			/*
    			 * Création de l'objet différé Test1.
    			 *
    			 * Dans la fonction de rappel de l'objet, on ajoute
    			 * une fonction de rappel à la file d'attente des
    			 * fonctions de rappel qui seront appelées en cas
    			 * d'échec.
    			 *
    			 * Après la création de l'objet, on lui ajoute par
    			 * la méthode then une ou plusieurs fonctions de
    			 * rappel qui seront activées en cas de succès et
    			 * une ou plusieurs fonctions de rappel qui seront
    			 * activées en cas d'échec.
    			 *
    			 * La méthode then accepte, comme ici, une seule fonction
    			 * ou un tableau (array) de fonctions.
    			 *
    			 * Les fonctions de rappel seront activées dans l'ordre
    			 * de leur ajout à la file d'attente.
    			 */ 
    			var objDifTest1 = $.Deferred(function(){
    				console.log("L'objet différé objDifTest1 a été initialisé");
     
    				// fonction de rappel qui sera appelée en cas d'échec
    				this.fail(function(){
    					console.log("Zut !");
    				});
    			}).then(funcDone, funcFail);
     
    			// Création de l'objet différé Test2
    			var objDifTest2 = $.Deferred(function(){
    				console.log("L'objet différé objDifTest2 a été initialisé");
     
    				// fonction de rappel qui sera appelée en cas d'échec
    				this.fail(function(){
    					console.log("Zut !");
    				});
    			}).then(funcDone, funcFail);
     
    			/*
    			  * Le Test1, on le termine par un succès en
    			  * appelant la méthode resolve avec ou sans
    			  * arguments.
    			  */
    			var funcTest1 = function(){
    				console.log("La fonction funcTest1 a été appelée");
     
    				objDifTest1.resolve("funcTest1", arguments);
    			};
     
    			/*
    			  * Le Test2, on le termine par un échec en
    			  * appelant la méthode reject avec ou sans
    			  * arguments.
    			  */
    			var funcTest2 = function(){
    				console.log("La fonction funcTest2 a été appelée");
     
    				objDifTest2.reject("funcTest2", arguments);
    			};
     
    			/*
    			 * On demande à l'objet différé objDifTest1 d'ajouter
    			 * cette fonction de rappel à la file d'attente des
    			 * fonctions qui seront appelées en cas de succès.
    			 */
    			objDifTest1.done(function(){
    				console.log("Yaisse !");
    			});
     
    			/*
    			 * $.when() génère un objet différé, ce qui permet
    			 * d'enchainer les instructions ici then.
    			 *
    			 * $.when() est utile pour gérer le résultat final d'un
    			 * ensemble d'objets différés.
    			 */
    			$.when(objDifTest1, objDifTest2).then(
    				function(){
    					console.log("Le résultat final est un succès !", arguments);
    				},
    				function(){
    					console.log("Le résultat final est un échec !", arguments);
    				}
    			);
     
    			funcTest1("hello");
     
    			funcTest2("Oops");
     
    			/*
    			L'objet différé objDifTest1 a été initialisé
    			L'objet différé objDifTest2 a été initialisé
     
    			La fonction funcTest1 a été appelée
    			C'est un succès ! ["funcTest1", ["hello"]]
    			Yaisse !
     
    			La fonction funcTest2 a été appelée
    			Zut !
    			C'est un échec ! ["funcTest2", ["Oops"]]
     
    			Le résultat final est un échec ! ["funcTest2", ["Oops"]]
    			*/
    		});
    	</script>
    </body>  
    </html>
    Exemple 2 : avec des fonctions qui retournent un objet différé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta http-equiv="X-UA-Compatible" content="chrome=1">
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal;
    		font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
    		div#conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF;
    		color:#000000; border:1px solid #666666; }
     
    		/* TEST */
    	</style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<div id="conteneur">
    		<p>Un mot pour remplir</p>
    	</div>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script>
    	<script>
    		$(function(){
    			function test1(){
    				var objDif = $.Deferred();
     
    				if (String(arguments[0]).length > 5){
    					objDif.resolve("test1", arguments);
    				} else {
    					objDif.reject("test1", arguments);
    				}
     
    				// Retourne l'objet différé dans l'état "succès" ou "échec".
    				return objDif.promise();
    			}
     
    			function test2(){
    				var objDif = $.Deferred();
     
    				if (String(arguments[0]).length > 5){
    					objDif.resolve("test1", arguments);
    				} else {
    					objDif.reject("test1", arguments);
    				}
     
    				// Retourne l'objet différé dans l'état "succès" ou "échec".
    				return objDif.promise();
    			}
     
    			function test3(){
    				var objDif = $.Deferred();
     
    				// On oublie de fixer l'état de l'objet différé
    				return objDif.promise();
    			}
     
    			/*
    			 * Important, voir les commentaires ci-dessous
    			 */
    			var objDifFinal = $.when(test1("Hello"), test2("Bonjour"));
     
    			objDifFinal.done(function(){
    					console.log("Le résultat final est un succès !", arguments);
    			});
     
    			objDifFinal.fail(function(){
    					console.log("Le résultat final est un échec !", arguments);
    			});
     
    			objDifFinal.always(function(){
    					console.log("L'objet différé objDifFinal a été créé !", arguments);
    			});
     
    			/*
    			 * Pour : var objDif = $.when(test1("Hello"), test2("Bonjour"));
    			 * Le résultat final est un échec ! ["test1", ["Hello"]]
    			 *
    			 * Pour : var objDifFinal = $.when(test1("Hello"), test2("Bonjour"), test3("Oops"));
    			 * Le résultat final est un échec ! ["test1", ["Hello"]]
    			 * Car quel que soit l'état du troisième objet différé, le
    			 * résultat final sera un échec.
    			 * 
    			 * Pour : var objDif = $.when(test1("Bonjour"), test2("Bonjour"), test3("Oops"));
    			 * $.when() ne peut pas construire objDifFinal, car l'état du
    			 * troisième objet différé n'est pas encore déterminé.
    			 */
    		});
    	</script>
    </body>  
    </html>

  8. #28
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je intercepter les frappes multitouches ?
    [FAIT] [jQuery 1.5.2] [2011-04-12] [danielhagnoul, SpaceFrog, nico78200]

    Comment puis-je intercepter les frappes multitouches ?

    Les événements clavier (keydown, keyup) gèrent la frappe d'une seule touche. Pour détecter des combinaisons de touches, on doit stocker le fait que l'utilisateur garde une ou des touches enfoncées et tenir compte du relâchement des touches.

    Nous avons donc besoin d'une série de booléens, un par touche surveillée, qui indique (true) si la touche est enfoncée. On passera donc le booléen à true sur l'événement keydown et à false sur l'événement keyup.

    Pour une frappe multitouche incorporant une ou plusieurs touches spéciales on doit se servir de : ctrlKey, shiftKey, altKey ou metaKey (recommandation W3C DOM level 2).

    On stockera les données dans l'espace data(), voir : http://api.jquery.com/data/

    Pour ne pas surcharger $("body").data() et éviter une collision de noms, on doit stocker les données dans l'élément du DOM où l'action s'appliquera. Dans cet exemple, il s'agit de la division d'ID "multitouche".

    Nota bene
    • Si l'on souhaite gérer la frappe d'une touche et la frappe de cette touche en combinaison avec une autre, on doit bien prendre en compte que les deux événements se produiront (flèche gauche seule et flèche gauche plus flèche haut dans l'exemple).
    • Si l'utilisateur garde la ou les touches enfoncées, l'événement se répète à une vitesse qui dépend du navigateur utilisé.
    • L'exemple montre comment intercepter les keyEvents, mais il vous appartient de mettre au point la logique d'utilisation en fonction de vos besoins.


    Exemple (testé avec succès sous IE9, F4 et C10) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!-- on stockera les événements key dans le data() de la division multitouche -->
    <div id="multitouche"></div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <script>
    	$(function(){
    		$("#multitouche").data("key", {
    			key37: false, // flèche gauche
    			key38: false, // flèche haut
    			key39: false, // flèche droite
    			key40: false,  // flèche bas
    			key80: false   // touche p
    		});
     
    		$(document).keydown(function(e){
    			var objDataKey = $("#multitouche").data("key");
     
    			switch(e.which){
    				case 37:
    					objDataKey.key37 = true;
    					break;
    				case 38:
    					objDataKey.key38 = true;
    					break;
    				case 39:
    					objDataKey.key39 = true;
    					break;
    				case 40:
    					objDataKey.key40 = true;
    					break;
    				case 80:
    					objDataKey.key80 = true;
    					break;
    			}
     
    			if (e.shiftKey && e.ctrlKey && objDataKey.key80){
    				console.log("CTRL + SHIFT + P");
    			} else if (e.ctrlKey && objDataKey.key37){
    				console.log("CTRL plus flèche gauche");
    			} else if (objDataKey.key37 && objDataKey.key38){
    				console.log("flèche gauche plus flèche haut");
    			} else if (objDataKey.key37){
    				console.log("flèche gauche");
    			} else if (objDataKey.key39){
    				console.log("flèche droite");
    			} else if (objDataKey.key38){
    				console.log("flèche haut");
    			} else if (objDataKey.key40){
    				console.log("flèche bas");
    			}
     
    			/*
    			 * Indispensable pour bloquer
    			 * l'action par défaut et la propagation
    			 * de l'événement si on utilise une combinaison
    			 * multitouche qui provoque une action
    			 * du navigateur.
    			 *
    			 * CTRl+SHIFT+P provoque le passage en
    			 * navigation privée sous IE9 et F4.
    			 */
    			return false;
    		});
     
    		$(document).keyup(function(e){
    			var objDataKey = $("#multitouche").data("key");
     
    			switch(e.which){
    				case 37:
    					objDataKey.key37 = false;
    					break;
    				case 38:
    					objDataKey.key38 = false;
    					break;
    				case 39:
    					objDataKey.key39 = false;
    					break;
    				case 40:
    					objDataKey.key40 = false;
    					break;
    				case 80:
    					objDataKey.key80 = false;
    					break;
    			}
    		});
    	});
    </script>

  9. #29
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je filtrer dynamiquement une table ?
    [FAIT] [jQuery 1.5.2] [2011-04-19] [Spacefrog, danielhagnoul]

    Comment puis-je filtrer dynamiquement une table ?

    Un filtre est un programme capable de traiter un ensemble d'informations pour en extraire un sous-ensemble d'informations pertinentes.

    Ici, par filtrer, on entend l'action d'afficher uniquement les cellules d'une colonne qui passent un test.

    Dynamiquement, car l'on doit recommencer le filtrage lorsque l'utilisateur change le critère ou la colonne de test.

    Pour un tableau comprenant plusieurs colonnes on affiche la ligne contenant la cellule qui passe le test.

    Le critère de test sera une expression rationnelle : RegExp (également dénommée "expression régulière" en traduction littérale).

    Citation de http://fr.wikipedia.org/wiki/RegExp.

    Une expression rationnelle est une chaîne de caractères que l’on appelle parfois un motif et qui décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise.
    Documentation :


    Exemple :

    Nota bene : la méthode de @SpaceFrog pour construire un tableau est la plus rapide que je connaisse, mais le tableau comportant, 2000 x 6 = 12000 cellules, le temps d'affichage va de l'instantané à quelques instants en fonction de la puissance de votre navigateur et de votre ordinateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		/* Base */
    		body {background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 {font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {margin:0px; padding:0px; }
            img {border:none; }
    		h1 {font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p {padding:6px; }
            ul,ol,dl {list-style:none; padding-left:3px; padding-top:3px; }
            li {padding-bottom:3px; }
    		label {display:block; }
    		input {width:250px; }
    		input[type="button"] {width:auto; }
    		input[required] {border-right:3px solid orange; }
    		td {padding:3px; }
    		.conteneur {width:95%; min-width:800px; min-height:400px; margin:12px auto; background-color:#FFFFFF; color:#000000; border:1px solid #666666; }
     
    		/* Filtrer une table */
    		article {display:table-cell; }
    		article:first-of-type {max-width:400px; }
        </style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<section class="conteneur">
    		<article>
    			<p>La table contient six colonnes numérotées de 0 à 5.</p>
    			<p>Par défaut, on filtre les cellules de la troisième colonne. On affiche la ligne de la table pour laquelle la cellule de la troisième colonne contient le texte "Cellule 50" + un ou plusieurs chiffres après le 5.</p>
    			<form>
    				<p><label>Filtre : </label><input id="filtre" type="text" value="^Cellule 5\d*" required></p>
    				<p><label>Colonne : </label><input id="col" type="number" min="0" max="5" step="1" value="2" required></p>
    				<p><input id="btnTest" type="button" value="Test"/></p>
    			</form>
    		</article>
    		<article id="tableTest">
    		</article>
    	</section>
    	<footer itemscope itemtype="http://data-vocabulary.org/Person">
    		<time datetime="2011-04-25T15:45:00.000+02:00" pubdate>2011-04-25</time>  <span itemprop="name">Daniel Hagnoul</span> <a href="http://www.developpez.net/forums/u285162/danielhagnoul/" itemprop="url">@danielhagnoul</a>
    	</footer>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
    	<script>
    		/***************************
    		* Speed Table By SpaceFrog *
    		**************************/
    		function buildTable(destObj, nbrLines, nbrCells){			
    			var baliseTable = document.createElement('table'),
    				baliseTbody = document.createElement('tbody');
     
    			baliseTable.id = "foo";
     
    			for(var i = 0; i < nbrLines; i++){
    				new addLine(baliseTbody, nbrLines, nbrCells, i);
    			}
     
    			baliseTable.appendChild(baliseTbody);
    			destObj.appendChild(baliseTable);
    			document.close();
    		}
     
    		function addLine(destBody, nbrLines, nbrCells, contenu){
    			var newLine = document.createElement('tr');
     
    			for(var l=0; l < nbrCells; l++){
    				new addCells(newLine, contenu + '_' + l);
    			}
     
    			destBody.appendChild(newLine);
    		}
     
    		function addCells(destLine, contenu){
    			var newCell = document.createElement('td');
     
    			newCell.style.border = "solid 1px gray";
    			newCell.appendChild(document.createTextNode('Cellule ' + contenu));
    			destLine.appendChild(newCell);
    		}
    		//-----------------------
     
    		$(function(){
    			/*
    			 * On construit, très rapidement, une grande
    			 * table de test d'ID "foo", en utilisant la
    			 * fonction BuildTable de @SpaceFrog.
    			 *
    			 * (élément du DOM, nb de lignes, nb de colonnes)
    			 */
    			buildTable($("#tableTest")[0], 2000, 6);
     
    			/*
    			 * On filtre une colonne avec l'expression
    			 * rationnelle contenue dans l'input
    			 * d'ID filtre. $("#filtre").val().
    			 *
    			 * (l'index de la colonne de 0 à n)
    			 */
    			function bar(col){
    				// construction de la RegExp
    				var reg = new RegExp($("#filtre").val());
     
    				/*
    				 * Pour chaque ligne du corps de la table
    				 * d'ID "foo" on modifie la propriété CSS
    				 * display en fonction du résultat de la
    				 * fonction match() sur le texte de la
    				 * cellule de la colonne de test.
    				 */
    				$("#foo").children("tbody").children("tr").each(function(i, item){
    					$(item).css("display", ($(item).children('td').eq(col).text().match(reg)) ? '' : 'none');
    				});
    			}
     
    			/*
    			 * On filtre la table chaque fois
    			 * que l'utilisateur clique sur
    			 * le bouton Test.
    			 */
    			$("#btnTest").click(function(){
    				bar($("#col").val());
    			});
            });
    	</script>
    </body>  
    </html>
    Nota bene : le 2011-04-19, cet exemple fonctionne correctement sur les navigateurs IE9, F4 et C10. Pour les navigateurs obsolètes, le code jQuery fonctionnera lorsque les codes HTML5, CSS 2.1 et CSS 3 auront été remplacés par des codes HTML4 et CSS2.

  10. #30
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Présentation de jQuery
    [FAIT] [2011-04-19] [danielhagnoul, Vermine, Sepia]

    Présentation de jQuery

    Le framework jQuery est une bibliothèque logicielle, rapide et concise, conçue pour les programmeurs JavaScript.

    • Elle facilite le développement rapide d'applications web.
    • Elle simplifie de nombreuses tâches en réduisant la quantité de code que nous avons besoin d'écrire.
    • Elle fournit un socle éprouvé de propriétés et de méthodes (parcours et modification du DOM, gestion des événements, effets et animations, transactions asynchrones de plusieurs types avec un serveur) qui procure le même résultat sur tous les navigateurs depuis IE6+.
    • Mais elle ne dispense pas le programmeur de l'apprentissage des bases : CSS, HTML, DOM, JavaScript (fonction, événement, objet, JSON).


    Le programmeur trouvera sur le web de nombreux modules d'extension, que l'on appelle plugins, qui lui apporteront des solutions dans de nombreux domaines. L'écriture d'un plugin n'est pas une tâche anodine, mais c'est à la portée d'un débutant expérimenté.

    Avant de réinventer la roue, le programmeur n'oubliera pas l'existence de l'interface graphique, jQuery UI, et de ses composants, que l'on appelle widgets. Cette interface graphique possède des composants élaborés et flexibles qui répondent à la quasi-totalité des besoins du concepteur de site web.

  11. #31
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je interrompre une boucle each ?
    [FAIT] [jQuery 1.5.2] [2011-04-21]

    Comment puis-je interrompre une boucle each ?

    Une boucle each ne peut être interrompue que par un return false !

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <script>
    	$(function(){
    		function maFonction(){
    			var retour = "Je suis b";
     
    			$("*").each(function(i, item){
    				console.log(i, item);
     
    				if (true){
    					retour = "Je suis a";
     
    					/*
    					 * Une boucle each ne peut être interrompue
    					 * que par un return false !
    					 */
    					return false;
    				}
    			});
     
    			return retour;
    		}
     
    		console.log(maFonction());
    	});
    </script>

  12. #32
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut Où puis-je trouver la documentation officielle (en anglais) en ligne ?
    [FAIT] [2011-05-20] [gwinyam, danielhagnoul]

    Où puis-je trouver la documentation officielle (en anglais) en ligne ?

    Le sommaire : http://docs.jquery.com/Main_Page

    Les pages à lire absolument


    L'API jQuery (documentation avec de courts exemples) : http://api.jquery.com/

  13. #33
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je ajuster une image à son conteneur ?
    [FAIT] [jQuery 1.5.2] [2011-04-29] [plugin v1.1.0]

    Comment puis-je ajuster une image à son conteneur ?

    On souhaite que l'image occupe la place maximale, en tenant compte des bordures et du padding de l'élément conteneur, et en respectant son ratio optimum.

    Le plugin dvjhImgRatio traite toutes les images possédant la classe dvjhClassImg et un attribut data-ratio = largeurOptimumImg/hauteurOptimumImg.

    Exemple :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/badge.jpg" data-ratio="1.4848"/>


    Exemple (testé avec succès sur IE9, C10 et F4) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		/* Base */
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {margin:0px; padding:0px; }
    		body {background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 {font-family:serif; padding:6px; }
            img {border:none; }
    		h1 {font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p {padding:6px; }
            ul,ol,dl {list-style:none; padding-left:6px; padding-top:6px; }
            li {padding-bottom:6px; }
    		label {display:block; }
    		input {width:250px; }
    		input[type="button"] {width:auto; }
    		input[required] {border-right:3px solid orange; }
    		td {padding:3px; }
    		.conteneur {width:95%; min-width:800px; min-height:400px; margin:12px auto; background-color:#FFFFFF; color:#000000; border:1px solid #666666; }
     
    		/* Plugin */
    		div {float:left; border:1px dotted grey; overflow:hidden; word-wrap:break-word; padding:6px;}
    		.classDiv1 {width:100px; max-width:100px; height:100px; max-height:100px; }
    		.classDiv2 {width:150px; max-width:150px; height:100px; max-height:100px; }
    		.classDiv3 {width:200px; max-width:200px; height:100px; max-height:100px; }
    		.classDiv4 {width:250px; max-width:250px; height:400px; max-height:400px; }
    		.classDiv5 {width:350px; max-width:350px; height:400px; max-height:400px; }
    		.classDiv6 {width:450px; max-width:450px; height:400px; max-height:400px; }
    		.classDiv7 {width:550px; max-width:550px; height:400px; max-height:400px; }
    		.classDiv8 {width:350px; max-width:350px; height:400px; max-height:400px; }
    		.classDiv9 {width:150px; max-width:150px; height:400px; max-height:400px; }
        </style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<section class="conteneur">
            <div class="classDiv1">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/twitter.png" data-ratio="1.00"/>
            </div>
            <div class="classDiv2">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/Noël.jpg" data-ratio="0.6728"/>
            </div>
            <div class="classDiv3">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/avatarDVJH.jpg" data-ratio="1.00"/>
            </div>
            <p style="clear:both;">&nbsp;</p>
            <div class="classDiv4">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/Noël.jpg" data-ratio="0.6728"/>
            </div>
            <div class="classDiv5">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/imageTest.png" data-ratio="1.35"/>
            </div>
            <div class="classDiv6">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/rotating.gif" data-ratio="0.9638"/>
            </div>
            <p style="clear:both;">&nbsp;</p>
            <div class="classDiv7">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/badge.jpg" data-ratio="1.4848"/>
            </div>
            <div class="classDiv8">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/voeux.gif" data-ratio="4.14"/>
            </div>
            <div class="classDiv9">
                <img class="dvjhClassImg" src="http://danielhagnoul.developpez.com/images/badge.jpg" data-ratio="1.4848"/>
            </div>
            <p style="clear:both;">&nbsp;</p>
    	</section>
    	<footer itemscope itemtype="http://data-vocabulary.org/Person">
    		<time datetime="2011-04-29T22:05:00.000+02:00" pubdate>2011-04-29</time> <span itemprop="name">Daniel Hagnoul</span> <a href="http://www.developpez.net/forums/u285162/danielhagnoul/" itemprop="url">@danielhagnoul</a>
    	</footer>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
    	<script>
    		/*
    		 * Daniel Hagnoul
    		 * Plugin dvjhImgRatio
    		 * Code v1.1.0 du 2011-04-29
    		 *      v1.0.0 du 2011-04-25
    		 * ------------------------------------------
    		 * Usage : $(".dvjhClassImg").dvjhImgRatio();
    		 *
    		 * Pour un padding de 6px et une bordure de 1px :
    		 *     $(".dvjhClassImg").dvjhImgRatio({
             *         padding: [6, 6, 6, 6]
             *     });
    		 * ------------------------------------------
    		 * Options par défaut :
             *         border: [1, 1, 1, 1], // [top, right, bottom, left], l'unité est le pixel exclusivement
             *         padding: [0, 0, 0, 0] // [top, right, bottom, left], l'unité est le pixel exclusivement
    		 */
    		(function($){
    			$.fn.dvjhImgRatio = function(options){
                    var opts = $.extend(true, {}, $.fn.dvjhImgRatio.defaults, options);
     
    				return this.each(function(i, item){
    					var photo = $(item),
                            ratio = photo.data("ratio"),
    						photoParent = photo.parent(),
    						photoParentWidth = photoParent.innerWidth() - opts.border[1] - opts.border[3] - opts.padding[1] - opts.padding[3],
    						photoParentHeight = photoParent.innerHeight() - opts.border[0] - opts.border[2] - opts.padding[0] - opts.padding[2],
                            w = photoParentWidth,
                            h = w/ratio;
     
                        if (h > photoParentHeight){
                            h = photoParentHeight;
                            w = h*ratio;
                        }
     
                        // debug
                        /*
                        console.log("i = " + (i).toFixed(0), " | w = " + (w).toFixed(2),
                                    " | h = " + (h).toFixed(2),
                                    " | w/h = " + (w/h).toFixed(2), " | ratio = " + ratio);
                        */
     
    					photo.css({width: w, height: h});
    				});
    			};
     
                $.fn.dvjhImgRatio.defaults = {
                    border: [1, 1, 1, 1], // [top, right, bottom, left], l'unité est le pixel exclusivement
                    padding: [0, 0, 0, 0] // [top, right, bottom, left], l'unité est le pixel exclusivement
                };
    		})(jQuery);
     
    		$(function(){
    			/*
                 * Pour des divisions ayant une bordure
                 * de 1 px et un padding de 6px.
                 */
    			$(".dvjhClassImg").dvjhImgRatio({
                    padding: [6, 6, 6, 6]  // [top, right, bottom, left], l'unité est le pixel exclusivement
                });
    		});
    	</script>
    </body>  
    </html>
    Nota bene : la version 1.0.0 du plugin semblait fonctionner correctement, mais uniquement grâce à la collaboration active des navigateurs testés (C10, F4 et IE9) qui pour un élément bloc ayant une largeur (width et max-width) précise et une hauteur (height et max-height) précise se font une joie d'agrandir l'élément bloc pour y loger la totalité du contenu si vous oubliez de préciser : "overflow:hidden" !

    Truc et astuce : Pour un élément ayant des dimensions fixées, n'oubliez pas de préciser les propriétés "overflow:hidden" et "word-wrap:break-word".

  14. #34
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Comment puis-je différer la fermeture d'un menu ?
    [FAIT] [jQuery 1.6.1] [2011-05-22]

    Comment puis-je différer la fermeture d'un menu ?

    Pour simplifier, prenons deux divisions. La première contient le titre du menu et la seconde le menu lui-même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id="titre"></div>
    <div id="menu"></div>
    À l'ouverture de la page, la division menu est cachée par un "display:none;" ou par un hide().

    Le menu doit se montrer au survol de son titre et le menu doit se cacher lorsque l'utilisateur le quitte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $("#titre").mouseenter(function(){
    	$("#menu").fadeIn("slow");
    });
     
    $("#menu").mouseleave(function(){
    	$(this).fadeOut("slow");
    });
    C'est fonctionnel, mais à l'usage on constate rapidement que si l'utilisateur ne va pas sur le menu il ne se ferme jamais.

    Naturellement, on pense alors qu'il suffit de fermer le menu lorsque l'utilisateur quitte le titre. Mais il est impossible d'entrer dans le menu sans quitter le titre, donc une commande simple n'est pas possible. On doit programmer la fermeture du menu après un délai raisonnable et annuler cette programmation si l'utilisateur entre dans le menu.

    La méthode hover() est l'équivalent d'un mouseenter() plus un mouseleave().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    $(function(){
     
    	$("#menu").hide();
     
    	var objMenuTimeout = null;
     
    	$("#titre").hover(
    		function(){
    			$("#menu").fadeIn("slow");
    		},
    		function(){
    			objMenuTimeout = setTimeout(function(){
    				$("#menu").fadeOut("slow");
    			}, 2000); // 2000 millisecondes = 2 secondes
    		}
    	);
     
    	$("#menu").hover(
    		function(){
    			clearTimeout(objMenuTimeout);
    		},
    		function(){
    			$(this).fadeOut("slow");
    		}
    	);
     
    });
    De cette manière :
    • si vous allez sur le titre et restez sur le titre, le menu devient et reste visible ;
    • si vous quittez le titre sans passer par le menu, le menu devient invisible après le délai imposé ;
    • si vous quittez le titre en allant dans le menu, il reste visible tant que vous y restez et devient invisible lorsque vous le quittez.

  15. #35
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Menu minimaliste avec curseur animé
    [jQuery 1.6.2] [2011-07-11] [SpaceFrog, danielhagnoul]

    Menu minimaliste avec curseur animé

    Il s'agit d'un menu linéaire sans sous-menus, qui sert de support aux codes gérant l'animation du curseur.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<link href='http://fonts.googleapis.com/css?family=Redressed&subset=latin&v2' rel='stylesheet' type='text/css'>
    	<link rel="stylesheet" href="http://danielhagnoul.developpez.com/lib/jPicker/css/jPicker.dvjh-1.1.6.min.css" />
    	<style>
    		/* Base */
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {margin:0; padding:0; }
    		body {background-color:rgba(210, 214, 98, 0.5); color:#000000; font-family:sans-serif; font-size:medium; font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 {font-family:'Redressed', cursive; padding:6px; }
    		p, div, td {word-wrap:break-word; }
    		pre, code {white-space:pre-wrap; word-wrap:break-word; }
    		img, input, textarea, select {max-width:100%; }
            img {border:none; }
    		h1 {font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p {padding:6px; }
    		.conteneur {width:95%; min-width:800px; min-height:300px; margin:12px auto; background-color:#ffffff; color:#000000; border:1px solid #666666; }
     
    		/* curseur */
            ul,ol,dl {list-style:none; padding-top:3px; padding-bottom:3px; }
            li {padding:3px; }
    		.menuBarre {width:800px; margin:0 auto; text-align:center; border:0; }
    		.menuCurseur {position:relative; display:block; padding:3px; border:0; }
    		.menuBarre ul > li {display:inline-block; width: 80px; text-align:center; cursor:pointer;background-color:rgba(86, 211, 114, 0.35); border:1px solid green; }
    		.menuActif {background-color:rgba(221, 106, 39, 0.35) !important; }
    	</style>
    </head>
    <body>	
    	<h1>Forum jQuery</h1>
    	<section class="conteneur">
     
    		<div class="menuBarre">
    			<img class="menuCurseur" src="http://danielhagnoul.developpez.com/images/cursorSPF.gif" />
    			<ul>
    				<li>File</li>
    				<li>Edit</li>
    				<li class="menuActif">Code</li>
    				<li>Navigation</li>
    				<li>View</li>
    				<li>Projet</li>
    				<li>Tools</li>
    				<li>Help</li>
    			</ul>
    		</div>
     
    	</section>
    	<footer itemscope itemtype="http://data-vocabulary.org/Person">
    		<time datetime="2011-07-10T01:15:00.000+02:00" pubdate>2011-07-10</time> <span itemprop="name">Daniel Hagnoul</span> <a href="http://www.developpez.net/forums/u285162/danielhagnoul/" itemprop="url">@danielhagnoul</a>
    	</footer>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
    	<script charset="utf-8" src="http://danielhagnoul.developpez.com/lib/jPicker/jpicker-1.1.6.min.js"></script>
    	<script>
    		$(function(){
    			/* curseur */
    			var objMenuBarre = $(".menuBarre"),
    				objCurseur = $(".menuCurseur"),
    				objsLi = objMenuBarre.children("ul").children("li"),
    				curseurHalfWidth = objCurseur.outerWidth()/2,
    				startLeft = objCurseur.position().left,
    				actifLeft = function(){
    					// calcule la nouvelle position relative du curseur par rapport à l'élément actif
    					return parseInt($(".menuActif").position().left + $(".menuActif").innerWidth()/2 - startLeft - curseurHalfWidth, 10);
    				},
    				animLeft = function(item){
    					// calcule la nouvelle position relative du curseur par rapport à l'élément survolé
    					return parseInt($(item).position().left + $(item).innerWidth()/2 - startLeft - curseurHalfWidth, 10);
    				},
    				initLeft = function(){
    					// initialisation de la position du curseur
    					objCurseur.css("left", actifLeft() + "px");
    				};
     
    			// animation du curseur pour rejoindre le li survolé
    			objsLi.mouseenter(function(){
    				objCurseur.stop(true, false).animate({left: animLeft(this) + 'px'});
    			});
     
    			// retour du cursor au dessus du li ayant la classe menuActif 
    			objMenuBarre.mouseleave(function(){
    				objCurseur.stop(true, false).animate({left: actifLeft() + 'px'});
    			});
     
    			// modification de l'attribution de la classe menuActif
    			objsLi.click(function(){
    				objsLi.removeClass('menuActif');
    				$(this).addClass('menuActif');
    				initLeft();
    			});
     
    			initLeft();
     
    			/* jPicker : http://www.digitalmagicpro.com/jPicker/, outil pour choisir rapidement une couleur */
    			$.fn.jPicker.defaults.images.clientPath="http://danielhagnoul.developpez.com/lib/jPicker/images/";
    			$(".conteneur").jPicker({window:{expandable:true,title:"jPicker : choissisez une couleur :",
    			alphaSupport:true,position:{x:'screenCenter',y:'top'}},color:{ active:new $.jPicker.Color({ r: 210, g: 214, b: 98, a: 128 })}},
    			function(color, context){var c = color.val("all");if (c){$("body").css("backgroundColor", "rgba(" +
    			c.r + "," + c.g + "," + c.b + "," + (c.a/255).toFixed(2) + ")");}});
    		});
    	</script>
    </body>  
    </html>

  16. #36
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut Construire un plugin qui applique un effet CSS, au choix de l'utilisateur, pendant une durée indéterminée
    [jQuery 1.6.2] [2011-08-23] [SpaceFrog, danielhagnoul]

    Construire un plugin qui applique un effet CSS, au choix de l'utilisateur, pendant une durée indéterminée

    On utilise les méthodes setInterval et toggleClass pour appliquer alternativement l'effet CSS sur un élément du DOM. L'effet CSS et sa durée d'application (voir les options "class" et "speed") sont au choix de l'utilisateur.

    L'utilisateur peut stopper le plugin Blinker en déclenchant l'événement "stopBlinker".

    Toutes les options sont modifiables pour un usage particulier ou pour l'ensemble des usages.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // pour l'ensemble
    $.fn.Blinker.defaults.stop = "suffit";
     
    // pour un cas particulier
    $(selecteur).Blinker({
       "class": "maClasse",
       "stop": "suffitEvent"
    }):
    Nota bene : "class" sans guillemets est un mot clé !

    Plugin et exemple d'utilisation, voir les commentaires du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery : plugin Blinker</title>
    	<link rel='stylesheet' href='http://fonts.googleapis.com/css?family=Redressed&subset=latin&v2'>
    	<style>
    		/* Base */
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {margin:0px; padding:0px; }
    		body {background-color:rgba(255, 255, 86, 0.25); color:#000000; font-family:sans-serif; font-size:medium; 
    				font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 {font-family:serif; padding:6px; }
    		p, div, td {word-wrap:break-word; }
    		pre, code {white-space:pre-wrap; word-wrap:break-word; }
    		img, input, textarea, select {max-width:100%; }
            img {border:none; }
    		h1 {font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p {padding:6px; }
            ul,ol,dl {list-style:none; padding-left:6px; padding-top:6px; }
            li {padding-bottom:6px; }
    		.conteneur {width:95%; min-width:800px; min-height:400px; margin:12px auto; background-color:#FFFFFF; color:#000000; border:1px solid #666666; }
    		footer {margin-left:36px; }
     
    		/* Blinker */
    		input {display:block; margin:6px; }
    		.foo {
    			-moz-transform: scale(2.50) rotate(11deg) translate(59px, 74px) skew(11deg, 0deg);
    			-0-transform: scale(2.50) rotate(11deg) translate(59px, 74px) skew(11deg, 0deg);
    			-webkit-transform: scale(2.50) rotate(11deg) translate(59px, 74px) skew(11deg, 0deg);
    			-ms-transform: scale(2.50) rotate(11deg) translate(59px, 74px) skew(11deg, 0deg);
    			transform: scale(2.50) rotate(11deg) translate(59px, 74px) skew(11deg, 0deg);
    		}
    		.bar {
    			background-color:rgba(170, 255, 255, 0.25); color:#000000;
    			zoom: 2;
    		}
    		#stopfoo, #stopbar {display: none; ]
    	</style>
    </head>
    <body>
    	<h1>plugin Blinker</h1>
    	<section class="conteneur">
    		<input id="launchfoo" type="button" value="appliquer le plugin sur foo" />
    		<input id="stopfoo" type="button" value="stopper le plugin sur foo" />
    		<input id="foo" value="id=foo" type="text" />
    		<input id="launchbar" type="button" value="appliquer le plugin sur bar" />
    		<input id="stopbar" type="button" value="stopper le plugin sur bar" />
    		<input id="bar" value="id=bar" type="text" />
    	</section>
    	<footer itemscope itemtype="http://data-vocabulary.org/Person">
    		<time datetime="2011-08-23T23:00:00.000+02:00" pubdate>2011-08-23</time> 
    		<span itemprop="name">Daniel Hagnoul</span> 
    		<a href="http://www.developpez.net/forums/u285162/danielhagnoul/" itemprop="url">@danielhagnoul</a>
    	</footer>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
    	<script>
    		(function($){
    			/*
    				Blinker : un plugin qui applique un effet CSS, au choix de 
    				l'utilisateur, pendant une durée indéterminée.
     
    				On utilise les méthodes setInterval() et toggleClass() pour 
    				appliquer alternativement l'effet CSS sur un élément du DOM.
     
    				L'effet CSS et sa durée d'application (voir les options 
    				"class" et "speed") sont au choix de l'utilisateur.
     
    				L'utilisateur peut stopper le plugin Blinker en déclenchant 
    				l'événement "stopBlinker".
     
    				Toutes les options sont modifiables pour un usage particulier 
    				ou pour l'ensemble des usages.
     
    				Chaque sélecteur (item) utilise la méthode data() pour 
    				conserver en mémoire la référence retournée par setInterval() 
    				et la méthode bind() pour intercepter l'événement demandant 
    				l'application de clearInterval()
    			*/
    			$.fn.Blinker = function(options){
    				// options et méthode d'arrêt du plugin
    				var opts = $.extend(true, {}, $.fn.Blinker.defaults, options),
    					stop = function(self){
    						clearInterval($(self).data("objInterval"));
    						$(self).removeClass(opts.class);
    						$(self).data("objInterval", "");
    					};
     
    				// si la classe par défaut n'existe pas dans la feuille de style on la crée
    				if ($("style").text().match("."+opts.class) === null){
    					$("style").append("."+opts.class+" {background-color:red; color:white; )");
    				}
     
    				/*
    					Pour chaque élément contenu dans le sélecteur, on
    					toggle la classe opts.class pendant opts.speed
    					millisecondes jusqu'à ce que l'utilisateur stoppe le
    					plugin par un $(...).trigger(opts.stop).
    				*/
    				return this.each(function(i, item){
    						$(item).data("objInterval",
    							setInterval(function(){
    								$(item).toggleClass(opts.class);
    							}, opts.speed)
    						);
     
    						/*
    							unbind indispensable pour ne pas intercepter
    							le même événement plusieurs fois
    						*/
    						$(item).unbind(opts.stop).bind(opts.stop, function(){
    							if ($(this).data("objInterval")){
    								stop(this);
    							}
    						});
    				});
    			};
     
    			$.fn.Blinker.defaults = {
    				"class": "blinker", // classe par défaut
    				"speed": 500, // vitesse d'application de toggleClass
    				"stop": "stopBlinker" // non de l'événement déclenchant l'arrêt du plugin
    			};
    		})(jQuery);
     
    		$(function(){
    			$("#launchfoo").click(function(){
    				$(this).css("display", "none");
    				$("#stopfoo").css("display", "block");
     
    				// déclenchement du plugin Blinker
    				$("#foo").Blinker({
    					"class": "foo",
    					"speed": 2500
    				});
    			});
     
    			$('#stopfoo').click(function(){
    				$(this).css("display", "none");
    				$("#launchfoo").css("display", "block");
     
    				// arrêt du plugin Blinker
    				$("#foo").trigger("stopBlinker");
    			});
     
    			$("#launchbar").click(function(){
    				$(this).css("display", "none");
    				$("#stopbar").css("display", "block");
     
    				$("#bar").Blinker({
    					"class": "bar",
    					"speed": 1000
    				});
    			});
     
    			$('#stopbar').click(function(){
    				$(this).css("display", "none");
    				$("#launchbar").css("display", "block");
     
    				$("#bar").trigger("stopBlinker");
    			});
    		});
    	</script>
    </body>  
    </html>

  17. #37
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    Voici une petite proposition de plugin de slider minimaliste.

    Le principe est simple: un ul et des lis qui sont animés d'une translation vers la gauche dans un setInterval. Une fois la translation terminée, le lis est basculé en dernière position.
    => le lis se succèdent en boucle
    on peut ainsi faire defiler du texte ou des images...

    le code du plugin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    (function(SF){
    	/* SpaceFrog's simplisitc Slider plugin
    	 * Juste pour faire défiler des balises li et leur contenu de gauche à droite en boucle
    	 */
    	SF.fn.SF_SimpleSlider = function(options){
    		/* en option la taille de la zone de défimement,
    		* la vitesse des transitions
    		* la durée de pause entre les transitions
    		*/
    		var defaults={sWidth:200,sHeight: 20,sSpeed: 2000, sPause:6000},
    			pos=-defaults.sWidth,
    			$this=SF(this);
     
    		// Ajoute les options dans defaults (modifie defaults).
    		SF.extend(defaults, options);
    		//Encapsule le ul dasn un div (la fenetre de défilement)
    		$this.wrap($("<div\/>").attr('id',"sHolder").css( {"border":"solid 1px grey","border-bottom":"double 3px grey", "border-right":"double 3px grey","height":defaults.sHeight,"width":defaults.sWidth,"margin":0,"padding":"0 5px","overflow":"hidden"}));
    		//applique le style css aux li
    		$this.children('li').css({"margin":"0 5px 0 0", "padding":0,"border":0,"width":defaults.sWidth,"height":defaults.sHeight, "float":"left", "display":"inline-block"});
    		//applique le style à l'ul
    		$this.css({"margin":0 , "padding":0,"border":0,"width":defaults.sWidth*2, "list-style-position":"inside", "list-style-type":"none","display":"block"});
     
    		//lance la rotation des lis
    		setInterval(function(){
    			$this.children(":eq(0)").animate( {"margin-left":-defaults.sWidth-10} , defaults.sSpeed, "swing",function(){
    				$this.append($this.children(":eq(0)").css({"margin-left":0}));
    			})
    		}, defaults.sPause); // Temps de pause entre deux défilememnts
     
    		return this;
    	};
     })(jQuery);
    Son utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />	   
    <title>Nouvelle page 1</title>
    <style type="text/css">
    #sfSlider {display:none;
               font-family:verdana;
               font-size:12px;}
     </style>
     
    <script type='text/javascript' src='http://code.jquery.com/jquery.js'></script>
    <script type='text/javascript'>
    $(function(){
    $('#sfSlider').SF_SimpleSlider({sWidth:400,sHeight:80})
    })
    </script>
    </head>
    <body>
     
    <ul id="sfSlider">
    	<li>
                <p>contenu 1 </p>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris porttitor pretium tellus in hendrerit. Nunc in ante libero. 
            </li>
    	<li> <p>contenu 2 </p>
                Cras vulputate massa ac nisi gravida in vestibulum dui tristique. Pellentesque habitant morbi tristique senectus et netus.
            </li>
    	<li> <p>contenu 3 </p>
                Cras vulputate massa ac nisi gravida in vestibulum dui tristique, fames ac turpis egestas  et malesuada .  
            </li>
    	<li> <p>contenu 4 </p>
                Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestasfames ac turpis egestas. 
            </li>
    	<li> <p ><strong>contenu 5</strong></p>
                Morbi lobortis enim in libero sodales cursus. Vestibulum non nisl nibh, et viverra erat. Etiam ut sem eu urna sagittis porta vel.
            </li>
    	<li> <p>contenu 6 </p>
                Mauris id orci neque. Ut rutrum tristique lacinia. Praesent elementum, sem sed mattis facilisis, nibh nibh imperdiet augue.
            </li>
    	<li><i>contenu 7</i><br/>
                Quis tortor vel dapibus magna tortor eleifend turpis. Aenean fringilla urna eu nisi dictum ut egestas dolor suscipit. 
            </li>
    	<li> <p>contenu 8 </p>
                Et après ce contenu ci on recommence au premier contenu... !
            </li>
    </ul>
    </body>
    </html>
    Un grand merci à DanielHagnoul pour se relecture.

  18. #38
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut Plugin Valeur Par défaut pour champs input et textarea
    Bonjour,

    Je vous propose un petit plugin qui permet de jouer avec le contenu des champs de formulaires de type text et textarea:

    Par exemple au chargement de la page le champs texte contient "saisissez votre pseudo",
    lorsque le champs prend le focus il se vide
    lorsqu'il perd le focus et si il est vide il reprend la valeur "saisissez votre pseudo"
    Si lors du focus il ne contient pas la valeur par défaut, il reste inchangé.

    le code du plugin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    (function($){
        $.fn.PlaceHolder = function(options){
        // options et m?hode d'arr? du plugin
        var opts = $.extend(true, {}, $.fn.PlaceHolder.defaults, options);
    return this.each(function(i, item){
    	 if($(this).attr('type')=='text'){
    	    $(this).data('defaultValue', $(this).val()) 
    	  }
    	  if($(this).is('textarea')){
    	    $(this).data('defaultValue', $(this).html())
    	    $(this).val( $(this).html() )
    	  }
        $(this).focus(  function(){
    				if ($(this).val()==$(this).data('defaultValue')){$(this).val('')}
    				})
        $(this).blur(  function(){
             			if( $(this).val()=="") {$(this).val($(this).data('defaultValue'))}
    			      })	  
    	});
        }
    $.fn.PlaceHolder.defaults = {};
    })(jQuery);
    un exemple d'application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script type="text/javascript" src="PlaceHolder.js"></script>
        <title>Nouvelle page 1</title>
        <style type="text/css">
    html, body {
     	height:100%;
     	width:100%;
          margin:0;
    	padding:0;
    	}
    #cadre {
    	width: 310px;
    	margin:auto;
    	margin-top:10%;
    	border: double grey;
    	}
    .label { display:inline-block;
             width:150px;}
     
    textarea {
    	width:300px;
    	height:100px;
    	}
     
    </style> 
    <script type="text/javascript">
    $(function(){
    $('.placeholder').PlaceHolder();
    })
     </script> 
    </head>
    <body >
    <div id="cadre">
    <span class="label">Pseudo: </span><input type="text" class="placeholder" value="pseudo"  /><br />   
    <span class="label" >Mot de passe: </span><input type="text" class="placeholder" value="mot de passe"  />   <br />       
    <textarea class="placeholder" value="entrez votre texte" >entrez votre texte</textarea>   
    </div><!-- Ne pas oublier de fermer le div !!!! Merci Daniel -->        
    </body>
    </html>
    [edit]
    petit raccourci de code sur le is('textarea')merci cahnory

  19. #39
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut Comment Trier et classer des li dans un ul
    Un petit code, pas encore transformé en plugin (à mon avis ce n'est pas d'une grande utilité sous forme de plugin pour trier et regrouper des li alphabétiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
        <title>Nouvelle page 1</title>
        <style type="text/css">
    html, body {
          margin:0;
    	padding:0;
    	}
    </style> 
    <script type='text/javascript'>
     $(function(){
    tab=$('#alphaIndex li').get().sort(function(a,b){ return (a.innerHTML.replace(/^\s*/,'').toLowerCase()>= b.innerHTML.replace(/^\s*/,'').toLowerCase())?1:-1;})
    $('#alphaIndex').append(tab)
     
    $('#alphaIndex li').each( function(){
    	letter = $(this).text().match(/^\s*([a-z])/im)[1].toUpperCase()
    	if( $("#_"+letter).length==0){
    		$('#alphaIndex').append($('<li>').text(letter).css({"font-weight":"bold","text-decoration":"underline"}))
    		$('#alphaIndex').append($('<ul>').attr('id','_'+letter))}
    		$('#_'+letter).append($(this))
    })
    })
     </script>
    </head>
    <body>
    <ul id="alphaIndex">
       <li>xavier	</li>
       <li>Alexia</li>
       <li>bernard</li>
       <li>sophie</li>
       <li>Alexandre</li>
       <li>Franck</li>
       <li>Zoé</li>  
       <li>Philippe</li>   
       <li> Thierry</li>   
       <li>Paul</li>
       <li>   Francoise</li>
       <li> Pauline</li>
       <li>Jacques</li>
       <li>Pierre</li>
       <li>Michel</li>
       <li>michèle</li>   
       <li>micheline</li>   
       <li>Hector</li>
       <li>Ernest</li>
       <li>Philibert</li>
       <li>hubert</li>
       <li>david</li>
       <li>john</li>
       <li>mustapha</li>
       <li>mariette</li>
       <li>arielle</li>
       <li> thomas</li>
       <li>céline</li>
       <li>stuart</li>
       <li>fernand</li>
       <li>patrick</li>
       <li>tom</li>
       <li> suzanne</li>
       <li> hélène</li>
       <li> séverine</li>
       <li>roland</li>
       <li>walter</li>
       <li>sam</li>
       <li>franz</li>
       <li>victor</li>
       <li>maire-rose</li>
    </ul>
    </body>
    </html>

  20. #40
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    @vermine : je pense que cette directive : "En aucune manière, les codes postés ne doivent être commentés par les autres utilisateurs" n'a plus lieu d'être, car la discussion séparée pour l'ajout des commentaires n'existe plus. Je me permets donc de poster à la suite. Fait.

    @spacefrog : deux exemples intéressants. Le plugin est un exemple de plus sur l'utilité de la méthode data() et le script montre comment on peut manipuler une liste de "li" pour en faire une liste triée et ensuite une liste alphabétique. Mes propositions :

    Le plugin PlaceHolder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    (function($){
    	$.fn.PlaceHolder = function(options){
    		// Ce plugin n'a pas d'options par défaut
    		// var opts = $.extend(true, {}, $.fn.PlaceHolder.defaults, options);
     
    		return this.each( function( i, item ){
    			var jObj = $(item);
     
    			if( jObj.attr( 'type' ) == 'text' ){
    				jObj.data( 'defaultValue', jObj.val() );
    			}
     
    			if( jObj.is( 'textarea' ) ){
    				jObj.data( 'defaultValue', jObj.html() );
     
    				// jObj.val( jObj.html() ); // inutile je crois
    			}
     
    			jObj
    				.focus( function(){
    					if ( jObj.val() == jObj.data('defaultValue') ){
    						jObj.val('');
    					}
    				})
    				.blur(  function(){
    					if ( jObj.val( )== "" ){
    						jObj.val( jObj.data('defaultValue') );
    					}
    				});
    		});
    	};
     
    	// Pas d'options par défauts
    	// $.fn.PlaceHolder.defaults = {};
    })(jQuery);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div id="cadre">
    	<span class="label">Pseudo: </span><input type="text" class="placeholder" value="pseudo"  /><br />   
    	<span class="label" >Mot de passe: </span><input type="text" class="placeholder" value="mot de passe"  />   <br />       
    	<textarea class="placeholder" value="entrez votre texte" >entrez votre texte</textarea>
    </div> <!-- fin div manquant dans l'exemple de @spacefrog -->
    Transformation d'une liste en liste alphabétique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // Transformation en liste triée
    $( '#alphaIndex' ).html(
    	$( '#alphaIndex li' ).get().sort( function( a, b ){ return (
    		a.innerHTML.replace( /^\s*/, '').toLowerCase() >= b.innerHTML.replace( /^\s*/, '').toLowerCase()
    	) ? 1 : -1; })
     
    	/*
    	 * Pas de ; final car il s'agit d'insérer une suite
    	 * de <li>...</li> en HTML.
    	 * La liste des "li" est incluse dans le tableau (array) généré
    	 * par get() et trié par sort().
    	 * L'array est interprété implicitement comme un htmlString,
    	 * voir http://api.jquery.com/html/.
    	 */ 
    );
     
    // Transformation en liste alphabétique
    $( '#alphaIndex li' ).each( function(){
    	// On sélectionne la première lettre, en majuscule
    	var letter = $(this).text().match( /^\s*([a-z])/im )[1].toUpperCase();
     
    	/*
    	 * Si cette lettre n'est pas déjà dans la liste
    	 * alphabétique, on crée l'en-tête de la sous-liste
    	 * alphabétique.
    	 */
    	if ( $( "#_" + letter ).length == 0 ){
    		$( '#alphaIndex' ).append(
    			$( '<li/>' ).text( letter ).css({ "font-weight": "bold", "text-decoration": "underline" }),
    			$( '<ul/>' ).attr('id', '_' + letter)
    		);
    	}
     
    	// On ajoute les éléments "li" à la sous-liste
    	$( '#_' + letter ).append( $(this) );
    });

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/01/2007, 19h09
  2. Réponses: 8
    Dernier message: 08/12/2006, 13h22
  3. Ne choisir QUE les lignes qui ont ce critere
    Par elreybubu dans le forum Oracle
    Réponses: 13
    Dernier message: 29/11/2006, 16h59
  4. supprimer les fichiers qui ont des mêmes noms
    Par manaboko dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2006, 09h09
  5. Selectionner les date qui ont minimum une heure d'ecart
    Par uraxyd dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/07/2005, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo