Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2007, 14h58   #1
Expert Confirmé
 
Avatar de franculo_caoulene
 
Inscription : octobre 2003
Messages : 2 886
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 886
Points : 2 559
Points : 2 559
Par défaut [prototype]Ajouter un évenement à tous les checkbox

Salut,

J'essaie d'utiliser le framework prototype 1.5 pour ajouter un évènement click à tous les checkbox de mon formulaire, si possible sans faire de boucle. Sinon je ne vois vraiment pas l'intérêt de prototype!

Malheureusement la seule chose que j'ai réussi à faire c'est ajouter un évènement à un élément précise grâce à son id. Ce qui implique que si je souhaite l'ajouter à tous les checkbox je dois faire une boucle.

Ce qui fonctionne:
Code :
1
2
3
Event.observe(document.getElementById('10DernieresBP2'), 'click', function(event) {
    alert("coucou");
});
Ce qui ne fonctionne pas:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//ne génère pas d'erreur mais aucune alerte n'apparaît
Event.observe(document.getElementsByTagName('10DernieresBP2'), 'click', function(event) {
    alert("coucou");
});
 
//retourne "element has no properties"
Event.observe('input', 'click', function(event) {
    alert("coucou");
});
 
//retourne "element has no properties"
Event.observe('input[type="checkbox"]', 'click', function(event) {
    alert("coucou");
});
 
//retourne "$("input[type=\"checkbox\"]") has no properties" is not a function
$$('input[type="checkbox"]').observe('click', function(event) {
    alert("coucou");
});
 
//retourne "$$("input[type=\"checkbox\"]") is not a function"
$$('input[type="checkbox"]').observe('click', function(event) {
    alert("coucou");
});
Donc est-ce possible? Si oui, comment?

Merci par avance pour vos réponses.
__________________
Penser à la recherche et au bouton
franculo_caoulene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h08   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 121
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 121
Points : 45 272
Points : 45 272
à l'ancienne:
Code :
1
2
3
4
5
6
7
8
9
10
11
var TabInputs =document.getElementsByTagName('input');
 
var TabChecks=new Array();
 
for (i=0;i<TabInputs.length;i++){
 if (TabInputs[i].type.toLowerCase()="checkbox"){TabCheck.push(TabInputs[i])}
}
 
for (j=0;j<TabChecks.length;j++){
TabChecks[i].onclick=function(){alert("coucou"};
}
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h10   #3
Expert Confirmé
 
Avatar de franculo_caoulene
 
Inscription : octobre 2003
Messages : 2 886
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 886
Points : 2 559
Points : 2 559
Nan mais j'aurais quand même voulu faire ça en une seule ligne, vu que l'appli utilise prototype...

Décidément j'accroche pas, je vois pas ce qu'on lui trouve, mais bon c'est pas le sujet.
__________________
Penser à la recherche et au bouton
franculo_caoulene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h33   #4
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 121
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 121
Points : 45 272
Points : 45 272
A piori d'après ce que j'ai pu rechercher il faut passer par un turc du style ...

Code :
1
2
3
4
5
6
7
var TabInputs =document.getElementsByTagName('input');
 
for (i=0;i<TabInputs.length;i++){
 if (TabInputs[i].type.toLowerCase()="checkbox"){Event.observe(TabInputs[i], 'click', function(event) {
    alert("coucou");
});}
}
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h53   #5
Expert Confirmé
 
Avatar de franculo_caoulene
 
Inscription : octobre 2003
Messages : 2 886
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 886
Points : 2 559
Points : 2 559
Justement ça n'a aucune intérêt! Avec jquery ça donne une ligne de mémoire :
Code :
1
2
3
$('input[type="checkbox"]').click(function() {
    alert("coucou");
});
Finalement je l'ai fait à l'ancienne...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
var tabInput = document.getElementsByTagName('input');
var tabCheck = new Array();
 
for (i=0;i<tabInput.length;i++) {
    if (tabInput[i].type.toLowerCase()=="checkbox"){tabCheck.push(tabInput[i])}
}
 
for (j=0;j<tabCheck.length;j++){
    tabCheck[j].onclick = function(){  
             alert("coucou");
        });
    };
}
Après deux/trois petites corrections
__________________
Penser à la recherche et au bouton
franculo_caoulene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 12h35   #6
Futur Membre du Club
 
Inscription : février 2006
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 19
Points : 18
Points : 18
Par défaut En une ligne ?

Salut,

j'ai lu cette discussion car je cherchais à faire en sorte que sur l'appui d'entrée quand le focus est sur un select, mon formulaire de recherche soit posté, mais pas n'importe quel submit.

Au début, j'ai fait un onkeypress= document.monForm.submit() sur le <select>, mais le submit en question n'était pas identifiable. En effet, ayant plusieurs boutons de type submit, le premier caché pour l'appui sur entrée dans des input type text, des boutons 'Ajouter', 'Supprimer', 'Nouvelle recherche', et 'Recherche', je veux que ce soit le bouton 'Recherche' qui soit l'auteur de la soumission, afin de retrouver dans l'url postée : &rechercheBouton=Recherche par exemple.

Le code ci dessous, fait une ligne (xD), et branche sur tous les <select>, une action sur l'appui de la touche Entrée

La version en une ligne :
Code :
1
2
 
$A(document.getElementsByTagName("select")).each(function (leSelect) { Event.observe($(leSelect), "keydown", function(event){ if (event.keyCode == 13) { document.monForm.monBoutonSubmit.click(); } return false; }.bindAsEventListener($(leSelect)) ); }); }, false);
Maintenant la version compréhensible à la vue

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Event.observe(window, "load", function(event){
$A(document.getElementsByTagName("select")).each(function (leSelect) {
	Event.observe($(leSelect), "keydown", function(event){
		if (event.keyCode == 13) {
			document.monForm.monBoutonSubmit.click();
		}
		return false;
		}.bindAsEventListener($(leSelect))
	);
});
 
}, false);
Ce code a été testé pour :
  • Firefox 2.0.0.11
  • IE 6
  • IE 7
  • Safari 3.0.3 For windows
el_teedee est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h32.


 
 
 
 
Partenaires

Hébergement Web