Problème checkbox Javascript ou Ajax, Jquery
Fermé
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
-
Modifié par cedric77200 le 1/06/2012 à 14:33
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 - 27 nov. 2013 à 11:36
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 - 27 nov. 2013 à 11:36
A voir également:
- Problème checkbox Javascript ou Ajax, Jquery
- Telecharger javascript - Télécharger - Langages
- Vba checkbox value ✓ - Forum Excel
- Afficher un tableau javascript en html ✓ - Forum Javascript
- Javascript echo ✓ - Forum PHP
- Erreur #125 javascript - Forum Mozilla Firefox
19 réponses
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
3 juin 2012 à 11:47
3 juin 2012 à 11:47
chez moi onclick fonctionne sur Firefox et IE
<script type="text/javascript"> function doOnChange(){ var xhr_object = null; if(window.XMLHttpRequest) { // Firefox xhr_object = new XMLHttpRequest(); } else if(window.ActiveXObject) { // Internet Explorer xhr_object = new ActiveXObject('Microsoft.XMLHTTP'); } var method = 'POST'; var filename = 'ton_script.php'; xhr_object.open(method, filename, true); xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) { if (http_request.status == 200) { var tmp = xhr_object.responseText; alert(tmp); //ici tu peux si tu veux mettre une réponse que ton script php va te retourner par une echo (ex:mise à jour BDD ok) } } } xhr_object.send(null); } </script> <body> <p class="checkbox"> <input id="PlusQuinze" type="checkbox" name="PlusQuinze" value="true" onclick="doOnChange();" checked > </p>
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
4 juin 2012 à 13:53
4 juin 2012 à 13:53
Houps !! copier / coller malheureux de ma part depuis une autre page:
changes:
if(xhr_object.readyState == 4)
{
if (http_request.status == 200) {
changes:
if(xhr_object.readyState == 4)
{
if (http_request.status == 200) {
if(xhr_object.readyState == 4) { if (xhr_object.status == 200) {
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
1 juin 2012 à 14:35
1 juin 2012 à 14:35
Pour ceux qui se demandent, j'ai aussi échangé le onchange avec un onclick et ça ne marche pas non plus, le JS ne s'effectue pas.
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
Modifié par cedric77200 le 4/06/2012 à 10:57
Modifié par cedric77200 le 4/06/2012 à 10:57
Je vois que tu as mis une balise <body> avant le input. Celà veux dire que je dois impérativement mettre le script dans le head ?
Parce que je suis sur prestashop, et le head est dans un fichier et je n'ai aucune idée de l'endroit où il se trouve.
Sinon, j'ai un peu regardé l'Ajax et j'ai compris la partie navigateur avec le xhr, mais je ne comprend pas tout pour la suite.
Je dois me planter dans ce qu'il faut écrire pour le ton_script.php.
J'ai mis tout le chemin : [http://localhost/prestashop/modules/plusquinze/plusquinze_page.php ou plusquinze_page.php
ça n'a pas l'air de me réussir.
Du coup, la dernière condition : if (http_request.status == 200) ; ne marche pas.
Merci beaucoup pour ta réponse Alain_42.
Parce que je suis sur prestashop, et le head est dans un fichier et je n'ai aucune idée de l'endroit où il se trouve.
Sinon, j'ai un peu regardé l'Ajax et j'ai compris la partie navigateur avec le xhr, mais je ne comprend pas tout pour la suite.
Je dois me planter dans ce qu'il faut écrire pour le ton_script.php.
J'ai mis tout le chemin : [http://localhost/prestashop/modules/plusquinze/plusquinze_page.php ou plusquinze_page.php
ça n'a pas l'air de me réussir.
Du coup, la dernière condition : if (http_request.status == 200) ; ne marche pas.
Merci beaucoup pour ta réponse Alain_42.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
4 juin 2012 à 10:40
4 juin 2012 à 10:40
Pourquoi 4 pour readystate ?
il faut attendre la réponse à la requette ajax pour triater la réponse
si tu ne mets pas le script js dans le head ce n'est pas grave.
mets le au début de la page si tu peux
il faut attendre la réponse à la requette ajax pour triater la réponse
si tu ne mets pas le script js dans le head ce n'est pas grave.
mets le au début de la page si tu peux
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
4 juin 2012 à 11:01
4 juin 2012 à 11:01
Pardon, je modifait mon post précédent entre temps.
J'ai réussi a répondre aux question que je me posait.
Du coup comme je le dis au dessu, j'ai un problème au niveau de ma dernière boucle qui ne s'effectue pas parce que mon script php n'est pas trouvé.
Le request_status n'est ni en 200, ni en 404...
J'ai mis le script au début, mais il ne s'effectue pas. J'ai donc triché et mis le script directe dans le onchange=""
J'ai réussi a répondre aux question que je me posait.
Du coup comme je le dis au dessu, j'ai un problème au niveau de ma dernière boucle qui ne s'effectue pas parce que mon script php n'est pas trouvé.
Le request_status n'est ni en 200, ni en 404...
J'ai mis le script au début, mais il ne s'effectue pas. J'ai donc triché et mis le script directe dans le onchange=""
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
4 juin 2012 à 13:24
4 juin 2012 à 13:24
mon script php n'est pas trouvé.
mets le chemin relatif de ton script php par rapport à la page
ex: plusquinze/plusquinze.php si il est dans un rep plusquinze par rapport à ta page
sinon si dans m^me rep tu mets simplement 'plusquinze.php'
bizarre que ta fonction ne soit pas lancée, dans le onchange ça doit faire un code difficile à lire
mets le chemin relatif de ton script php par rapport à la page
ex: plusquinze/plusquinze.php si il est dans un rep plusquinze par rapport à ta page
sinon si dans m^me rep tu mets simplement 'plusquinze.php'
bizarre que ta fonction ne soit pas lancée, dans le onchange ça doit faire un code difficile à lire
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
4 juin 2012 à 13:50
4 juin 2012 à 13:50
Oui c'est pas facile à lire je te l'avoue.
J'ai trouvé le chemin qu'il fallais en débuguant.
L'état est maintenan en 200, mais, il ne m'exécute toujours pas l'echo par rapport à la boucle :
if (http_request.status == 200) ;
Donc là je ne vois vraiment plus ...
J'ai trouvé le chemin qu'il fallais en débuguant.
L'état est maintenan en 200, mais, il ne m'exécute toujours pas l'echo par rapport à la boucle :
if (http_request.status == 200) ;
Donc là je ne vois vraiment plus ...
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
Modifié par cedric77200 le 4/06/2012 à 14:46
Modifié par cedric77200 le 4/06/2012 à 14:46
Merci !
C'est bon, ça marche !
Je vais essayé de continuer seul.
Merci encore !
C'est bon, ça marche !
Je vais essayé de continuer seul.
Merci encore !
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
4 juin 2012 à 15:33
4 juin 2012 à 15:33
En fait mon problème n'est pas totalement résolu car mon fichier php ne s'exécute pas. J'ai beau mettre des tests echo ou alert, rien ne se passe et donc les bdd ne se mettent pas à jour.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
4 juin 2012 à 16:18
4 juin 2012 à 16:18
tu peux envoyer une valeur au script en fonction de l'état de la checkbox:
<script type="text/javascript"> function doOnChange(){ var xhr_object = null; if(window.XMLHttpRequest) { // Firefox xhr_object = new XMLHttpRequest(); } else if(window.ActiveXObject) { // Internet Explorer xhr_object = new ActiveXObject('Microsoft.XMLHTTP'); } var method = 'POST'; var filename = 'ton_script.php'; xhr_object.open(method, filename, true); xhr_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) { if (xhr_object.status == 200) { var tmp = xhr_object.responseText; alert(tmp); //ici tu peux si tu veux mettre une réponse que ton script php va te retourner par une echo (ex:mise à jour BDD ok) } } } var case_check=document.getElementById('PlusQuinze'); if(case_check.checked){ data="valeur_checkbox=1";}else{data="valeur_checkbox=0";} xhr_object.send(data); } </script> <body> <p class="checkbox"> <input id="PlusQuinze" type="checkbox" name="PlusQuinze" value="true" onclick="doOnChange();" checked > </p> ton_script.php <?php $valeur_checkbox=$_POST['valeur_checkbox']; //tu fait ton traitement puis echo "la réponse"; ?>
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
4 juin 2012 à 16:40
4 juin 2012 à 16:40
J'ai passé la valeur avec un onchange dans le input, mais là c'est le contenu dans le php qui ne s'effectue pas.
Et même avec des tests, je n'obtient rien.
Je sais que mes bases de donnés sont bonne parce que j'avais testé ce fichier php avant.
Et même avec des tests, je n'obtient rien.
Je sais que mes bases de donnés sont bonne parce que j'avais testé ce fichier php avant.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
4 juin 2012 à 18:05
4 juin 2012 à 18:05
J'ai passé la valeur avec un onchange dans le input,
je ne comprend pas ?
il faut en Ajax passer la valeur par xhr_object.send(data);
si tu veux faire un petit script php de test, sans appel BDD ni rien
ton_script.php
<?php
$valeur_checkbox=$_POST['valeur_checkbox'];
//on renvoie ce qu'on a reçu dans la réponse
echo "le script php a recu: ".$valeur_checkbox;
?>
je ne comprend pas ?
il faut en Ajax passer la valeur par xhr_object.send(data);
si tu veux faire un petit script php de test, sans appel BDD ni rien
ton_script.php
<?php
$valeur_checkbox=$_POST['valeur_checkbox'];
//on renvoie ce qu'on a reçu dans la réponse
echo "le script php a recu: ".$valeur_checkbox;
?>
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
Modifié par cedric77200 le 5/06/2012 à 10:52
Modifié par cedric77200 le 5/06/2012 à 10:52
J'ai mis un onchange en plus du onclick parce que ça marchait avant.
onchange="if(this.checked) this.value='true'; else this.value='false';"
Mais ce n'est pas une bonne idée, il faut que je fasse un test ajax plutôt.
Mais j'ai rajouté "if(this.checked) this.value='true'; else this.value='false';" dans le onclick plutôt. Vu que je sais que ça marche.
Par contre, ton code ne marche pas au niveau du test :
var case_check=document.getElementById('PlusQuinze');
if(case_check.checked){ data="valeur_checkbox=1";}else{data="valeur_checkbox=0";}
Mais mon fichier php, qui n'a pas de test, ne se déclenche toujours pas. je ne sais pas s'il faut rajouter une ligne ajax pour que celui-ci fasse les requêtes.
Et oui j'ai juste testé avec :
<?php
echo "test";
?>
Mais rien ne se passe.
A quoi correspond le : 'application/x-www-form-urlencoded'
à la ligne xhr_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); ???
onchange="if(this.checked) this.value='true'; else this.value='false';"
Mais ce n'est pas une bonne idée, il faut que je fasse un test ajax plutôt.
Mais j'ai rajouté "if(this.checked) this.value='true'; else this.value='false';" dans le onclick plutôt. Vu que je sais que ça marche.
Par contre, ton code ne marche pas au niveau du test :
var case_check=document.getElementById('PlusQuinze');
if(case_check.checked){ data="valeur_checkbox=1";}else{data="valeur_checkbox=0";}
Mais mon fichier php, qui n'a pas de test, ne se déclenche toujours pas. je ne sais pas s'il faut rajouter une ligne ajax pour que celui-ci fasse les requêtes.
Et oui j'ai juste testé avec :
<?php
echo "test";
?>
Mais rien ne se passe.
A quoi correspond le : 'application/x-www-form-urlencoded'
à la ligne xhr_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); ???
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
Modifié par cedric77200 le 5/06/2012 à 17:46
Modifié par cedric77200 le 5/06/2012 à 17:46
J'avais une erreur de parse dans une requête de mon php, c'est pour ça qu'il ne voulais même pas l'ouvrir.
Maintenan c'est tout bon, j'ai juste ma condition qui ne marche pas dans mon php et qui foire tout.
Maintenan c'est tout bon, j'ai juste ma condition qui ne marche pas dans mon php et qui foire tout.
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
8 juin 2012 à 11:27
8 juin 2012 à 11:27
Pour la condition j'ai remplacé ton :
var case_check=document.getElementById('PlusQuinze');
if(case_check.checked){ data='valeur_checkbox=1';}else{data='valeur_checkbox=0';}
xhr_object.send(data);
par
var case_check=document.getElementById('PlusQuinze');
if(case_check.checked){ data=1;}else{data=0;}
xhr_object.send(data);
ça ne marche pas, la condition marche toujours.
Je l'ai remplacé parce qu'il me mettait une parse error sur le double égale.
var case_check=document.getElementById('PlusQuinze');
if(case_check.checked){ data='valeur_checkbox=1';}else{data='valeur_checkbox=0';}
xhr_object.send(data);
par
var case_check=document.getElementById('PlusQuinze');
if(case_check.checked){ data=1;}else{data=0;}
xhr_object.send(data);
ça ne marche pas, la condition marche toujours.
Je l'ai remplacé parce qu'il me mettait une parse error sur le double égale.
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
8 juin 2012 à 15:24
8 juin 2012 à 15:24
Ma condition marche, c'est en fait mon send qui n'envoie pas la valeur au PHP.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
8 juin 2012 à 21:32
8 juin 2012 à 21:32
pour que le script php puisse récupérer la valeur passée par
xhr_object.send(data)
il faut que data contienne une definition ex valeur_check_box
data='valeur_checkbox=......
et tu recuperes dans le script php
par $_POST['valeur_checkbox']
pour voir ce qui est envoyé au script php tu peux mettre une alert
xhr_object.send(data)
il faut que data contienne une definition ex valeur_check_box
data='valeur_checkbox=......
et tu recuperes dans le script php
par $_POST['valeur_checkbox']
pour voir ce qui est envoyé au script php tu peux mettre une alert
alert("data envoyé"+data); xhr_object.send(data);
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
11 juin 2012 à 10:16
11 juin 2012 à 10:16
ça marche !
cedric77200
Messages postés
16
Date d'inscription
vendredi 1 juin 2012
Statut
Membre
Dernière intervention
11 juin 2012
11 juin 2012 à 15:22
11 juin 2012 à 15:22
Merci !
Antoine Crochet-Damais
Messages postés
16
Date d'inscription
vendredi 11 mars 2011
Statut
Webmaster
Dernière intervention
8 janvier 2014
1 240
27 nov. 2013 à 11:30
27 nov. 2013 à 11:30
Ici une astuce qui pourra sans doute vous aider : Comment utiliser jQuery pour vérifier la propriété checked d'une case à cocher ?
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
Modifié par ThEBiShOp le 27/11/2013 à 11:37
Modifié par ThEBiShOp le 27/11/2013 à 11:37
1 an après, c'est dommage de remonter un topic pour une réponse à côté (de mon point de vue).
En utilisant le jQuery, je trouverais plus pertinent d'utiliser quelque chose du genre :
En utilisant le jQuery, je trouverais plus pertinent d'utiliser quelque chose du genre :
$.('#maCheckbox').change(function() {
$.ajax({
url: "page.php"
});
});