Page 1 sur 3
Utiliser variable d'une fonction dans une autre
Posté : 31 mars 2015, 21:50
par [Compte supprime]
Bonjour,
J'utilise une fonction sur un onchange, elle me renvoit des données sql. Pour une 2ème fonction sur la page, j'ai besoin de connaître le nombre de ligne renvoyé.
J'ai lu qu'il fallait utiliser une variable globale donc à déclarer en dehors de la fonction. Le souci, la fonction est sur un onchange donc quand je teste un console.log($variable) elle est undefined ... Logique, elle n'est pas inité au chargement de la page, seulement quand le select est modifié ...
Je ne vois pas comment je dois faire pour la récupérer, si vous aviez une piste..
Merci !

Re: Utiliser variable d'une fonction dans une autre
Posté : 31 mars 2015, 23:00
par tof73
var mavariable = 0;
function mafonction(){
mavariable = 1;
}
function uneautrefonction(){
console.log(mavariable);
}
uneautrefonction();
mafonction();
uneautrefonction();
Re: Utiliser variable d'une fonction dans une autre
Posté : 01 avr. 2015, 08:42
par [Compte supprime]
Bonjour,
Merci pour votre réponse mais si je reprends votre code :
var mavariable = 0;
function mafonction(){
mavariable = 1;
}
function uneautrefonction(){
console.log(mavariable);
}
Je charge la page, les fonctions de base vont se lancer directement mais imaginez que votre 1ère fonction est sur un onchange.
Du coup, avec firebug, au chargement de la page, mavariable est undefined ... Forcément le onchange n'a pas eu lieu.
Merci !
Re: Utiliser variable d'une fonction dans une autre
Posté : 04 avr. 2015, 00:56
par Aureusms
Je comprend pas trop ce que tu veux dire avec ton onchange.
var mavariable = 0;
$('.maselect').onchange(function() {
mavariable += 1;
}):
Re: Utiliser variable d'une fonction dans une autre
Posté : 07 avr. 2015, 12:10
par [Compte supprime]
bonjour,
ça va être plus simple avec le code :
var rows = 0;
$(document).ready(function () {
$("#MonSelect").selectmenu({
change:function () {
var id = $('#MonSelect').val();
$.ajax({
type: "POST",
data: {"ID": id},
url: "traitement.php",
dataType: "json",
success: function (data) {
rows = data.length;
$('#table_d').empty();
$.each(data, function (index, valeur) {
var input_match = $('<input>', {
type: 'text',
value: valeur.match
});
var input_val = $('<input>', {
type: 'text',
value: valeur.val
});
var row = $("<tr />");
$("#table_d").append(row);
row.append($("<td class='test'>" + input_match.val() + "</td>"));
row.append($("<td class='test'>" + input_val.val() + "</td>"));
});
}
});
}
});
});
console.log(rows);
Quand je charge la page, le "console.log(rows);" est en undefined. C'est logique, vu que sa valeur ne sera modifié qu'au moment du onchange sur le select.
Re: Utiliser variable d'une fonction dans une autre
Posté : 08 avr. 2015, 22:50
par Aureusms
J'ai ré-indété ton code pour mieux le lire :
Code : Tout sélectionner
var rows = 0;
$(document).ready(function () {
$("#MonSelect").selectmenu({
change:function () {
var id = $('#MonSelect').val();
$.ajax({
type: "POST",
data: {"ID": id},
url: "traitement.php",
dataType: "json",
success: function (data) {
rows = data.length;
$('#table_d').empty();
$.each(data, function (index, valeur) {
var input_match = $('<input>', {
type: 'text',
value: valeur.match
});
var input_val = $('<input>', {
type: 'text',
value: valeur.val
});
var row = $("<tr />");
$("#table_d").append(row);
row.append($("<td class='test'>" + input_match.val() + "</td>"));
row.append($("<td class='test'>" + input_val.val() + "</td>"));
});
}
});
}
});
});
console.log(rows);
si tu défini rows = 0; normalement console.log(rows) doit au moins te donner 0;
Ta fonction selectmenu() elle est située où ?
Re: Utiliser variable d'une fonction dans une autre
Posté : 09 avr. 2015, 12:21
par [Compte supprime]
Merci pour l'indentation, impossible de le faire, la balise code voulait pas fonctionner ...
Oui effectivement, trop de test ... Il me renvoi bien 0 !
Pour selectmenu, il dépend de jquery, j'ai placé ce code avant :
<script src="js/jquery-min.js"></script>
<script src="js/jquery-ui.js"></script>
Je m'en sers pour modifier l'apparence du select avec un thème css jquery
Merci.
Re: Utiliser variable d'une fonction dans une autre
Posté : 09 avr. 2015, 12:28
par Aureusms
Bonjour,
Ce que je remarque est que tu fais la modification de rows dans le retour Ajax qui est asynchrone.
Aussi, la variable ne prendra effet qu'après le retour de l'objet AJAX.
Essayes cela pour voir (j'ai mis volontairement des saut de lignes pour que tu puisses visualiser où j'ai modifié)
Code : Tout sélectionner
var rows = 0;
$(document).ready(function () {
$("#MonSelect").selectmenu({
change:function () {
var id = $('#MonSelect').val();
$.ajax({
type: "POST",
data: {"ID": id},
url: "traitement.php",
dataType: "json",
success: function (data) {
rows = data.length;
console.log(rows);
$('#table_d').empty();
$.each(data, function (index, valeur) {
var input_match = $('<input>', {
type: 'text',
value: valeur.match
});
var input_val = $('<input>', {
type: 'text',
value: valeur.val
});
var row = $("<tr />");
$("#table_d").append(row);
row.append($("<td class='test'>" + input_match.val() + "</td>"));
row.append($("<td class='test'>" + input_val.val() + "</td>"));
});
}
});
}
});
});
Re: Utiliser variable d'une fonction dans une autre
Posté : 09 avr. 2015, 13:35
par [Compte supprime]
Oui nous sommes d'accord, le souci, c'est que cette variable n'obtiendra sa valeur qu'à la modification du select.
le console.log à cet endroit me renvoi bien la bonne valeur. Mais j'ai besoin de récupérer cette variable pour un second script...
Merci
Re: Utiliser variable d'une fonction dans une autre
Posté : 10 avr. 2015, 11:06
par Aureusms
Il te faut donc utiliser les callbacks de jQuery ie. lancer la fonction 2 quand la fonction 1 vient de répondre.
Tu peux simplement lancer la fonction 2 dans le "success" de l'AJAX :
Code : Tout sélectionner
var rows = 0;
$(document).ready(function () {
$("#MonSelect").selectmenu({
change:function () {
var id = $('#MonSelect').val();
$.ajax({
type: "POST",
data: {"ID": id},
url: "traitement.php",
dataType: "json",
success: function (data) {
rows = data.length;
mafonction2(rows);
$('#table_d').empty();
$.each(data, function (index, valeur) {
var input_match = $('<input>', {
type: 'text',
value: valeur.match
});
var input_val = $('<input>', {
type: 'text',
value: valeur.val
});
var row = $("<tr />");
$("#table_d").append(row);
row.append($("<td class='test'>" + input_match.val() + "</td>"));
row.append($("<td class='test'>" + input_val.val() + "</td>"));
});
}
});
}
});
});
ou utiliser un when().done(). (ex trouvé sur
https://learn.jquery.com/code-organizat ... deferreds/)
Code : Tout sélectionner
function getLatestNews() {
return $.get( "latestNews.php", function( data ) {
console.log( "news data received" );
$( ".news" ).html( data );
});
}
function getLatestReactions() {
return $.get( "latestReactions.php", function( data ) {
console.log( "reactions data received" );
$( ".reactions" ).html( data );
});
}
function prepareInterface() {
return $.Deferred(function( dfd ) {
var latest = $( ".news, .reactions" );
latest.slideDown( 500, dfd.resolve );
latest.addClass( "active" );
}).promise();
}
$.when(
getLatestNews(),
getLatestReactions(),
prepareInterface()
).then(function() {
console.log( "fire after requests succeed" );
}).fail(function() {
console.log( "something went wrong!" );
});
Re: Utiliser variable d'une fonction dans une autre
Posté : 16 avr. 2015, 11:17
par [Compte supprime]
Bonjour,
Merci pour ta réponse, je n'ai pas répondu avant car je tente de mettre une des 2 solutions en place à partir d'exemple trouvé sur le net, mais je galère ...
C'est pas tellement de mon niveau ...
Je continue ...

Re: Utiliser variable d'une fonction dans une autre
Posté : 16 avr. 2015, 11:25
par Aureusms
courage... On est tous passé par là...
Re: Utiliser variable d'une fonction dans une autre
Posté : 17 avr. 2015, 11:37
par [Compte supprime]
Bonjour,
Quand j'utilise ce code
Code : Tout sélectionner
<script>
var rows = 0;
$(document).ready(function test() {
$("#MonSelect").selectmenu({
change:function () {
var id = $('#MonSelect').val();
$.ajax({
type: "POST",
data: {"ID": id},
url: "traitement.php",
dataType: "json",
success: function (data) {
rows = data.length;
$('#table_d').empty();
$.each(data, function (index, valeur) {
var input_match = $('<input>', {
type: 'text',
value: valeur.match
});
var input_val = $('<input>', {
type: 'text',
value: valeur.val
});
var row = $("<tr />");
$("#table_d").append(row);
row.append($("<td class='test'>" + input_match.val() + "</td>"));
row.append($("<td class='test'>" + input_val.val() + "</td>"));
});
}
});
}
});
});
$.when(test()).done(function(){
console.log(rows);
});
</script>
Sur Firebug, j'ai
Code : Tout sélectionner
ReferenceError: test is not defined
$.when(test()).done(function(){
C'est une erreur de syntaxe ou de compréhension ? Ou les 2
Merci!
Re: Utiliser variable d'une fonction dans une autre
Posté : 17 avr. 2015, 11:46
par Aureusms
Je ne pense pas que tu puisse déclarer ta fonction test() de la sorte :
créé plutôt ne fonction jQuery :
Code : Tout sélectionner
<script>
var rows = 0;
$("#MonSelect").ready(
$.when($("#MonSelect")test()).done(function(){
console.log(rows);
});
});
//fonction position Boutons sur bGauche
(function($) {
$.fn.test = function (obj) {
this.each(function () {
$(this).selectmenu({
change:function () {
var id = $(this).val();
$.ajax({
type: "POST",
data: {"ID": id},
url: "traitement.php",
dataType: "json",
success: function (data) {
rows = data.length;
$('#table_d').empty();
$.each(data, function (index, valeur) {
var input_match = $('<input>', {
type: 'text',
value: valeur.match
});
var input_val = $('<input>', {
type: 'text',
value: valeur.val
});
var row = $("<tr />");
$("#table_d").append(row);
row.append($("<td class='test'>" + input_match.val() + "</td>"));
row.append($("<td class='test'>" + input_val.val() + "</td>"));
});
}
});
}
});
});
return this;
};
})(jQuery);
</script>
Re: Utiliser variable d'une fonction dans une autre
Posté : 17 avr. 2015, 11:59
par [Compte supprime]
J'ai testé, j'ai cette erreur :
Code : Tout sélectionner
SyntaxError: missing ) after argument list
$.when($("#MonSelect")test()).done(function(){
Et par contre, la fonction jquery ".selectmenu" ne fonctionne plus car elle a shooté la mise en forme qui va avec ...
Merci!