Comment passer les variables d'une fonction a une autre fonction?

pingounux Messages postés 2 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 13 février 2009 - 12 févr. 2009 à 21:10
pingounux Messages postés 2 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 13 février 2009 - 13 févr. 2009 à 16:35
Bonjours,
Je debute en javascript et  j'ai des soucis pour transmettre des variables d'une fonction a une autre.
J'ai 2 fonctions : initCombo et initDialogBox() toutes deux dans un fichier dialog.js
J'instancie ma fonction initCombo de la sorte :
var combo1 = new initCombo(YAHOO.example.Data.menu.breakfasts, "bInput", "bContainer", "toggleB");
var combo2...
   
function initCombo(datasource, comboinput, combocontainer, combotoggle){
        // Use to define datasource
        this.data = datasource;
        this.input = comboinput;
        this.container = combocontainer;
        this.toggle = combotoggle;
...}

et :
function initDialogBox(){....}

Et impossible de conserver la valeur des variables de la 1ere fonction dans la seconde.
A titre d'example, j'ai besoin de recuperer "datasource" dans ma fonction initDialogBox.
Si besoin, je peux proposer une copie du code.

Merci de votre aide

2 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
13 févr. 2009 à 10:01
bonjour,

ça dépend de comment tu décris, où tu appelles la 2ème fonction....

    function f1()
    {   this.p="exemple";   
        this.f2();
    }
    f1.prototype.f2=function()
    {    alert(this.p);    }
       
    var fnct=new f1();
   
    fnct.f2();

par exemple
il y a d'autres "syntaxes"

Cordialement

[mon Site][M'écrire]Bul
0
pingounux Messages postés 2 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 13 février 2009
13 févr. 2009 à 16:35
Merci, pour l'information, mais je me demande si je peux faire de la sorte avec mon script ?
J'utilise 2 fonctions, une pour creer une combobox avec autocompletion, et l'autre pour creer la dialog box.
Mon programme fonctionne de la facon suivante (note j'utilise YUI) :
Je cree des Objets Combo, via la fonction initCombo, ensuite j'utilise un handler qui me permet d'afficher une boite de dialogue quand on selectionne dans la combobox l'item (add-item), une fois la boite de dialogue ouverte, on peut ajouter des nouveaux items dans la combobox.
(la partie creation de la boite de dialogue est sous le controle de initDialogBox, mais j'ai besoin de recuperer les variables inscrites plus haut dans cette fonction).

Je me demande si je devrais pas incorporer ma fonction initDialogBox comme methode dans initCombo ?
Qu'en pensez-vous ?
Ce code marche bien pour faire plusieurs instances de ma combobox, via le code suivant :
var combo1 = new initCombo(YAHOO.example.Data.menu.breakfasts, "bInput", "bContainer", "toggleB");
var combo2...
Mais, j'ai des soucis pour la partie dialogbox, je dois aussi instancier plusieurs boites de dialogues avec mes combo (une par combo de creer). Je bloque sur cette partie.
Si quelqu'un a une idee

Voici une copie du code actuel ;
function initCombo(datasource, comboinput, combocontainer, combotoggle){
        // Use to define datasource
        this.data = datasource;
        this.input = comboinput;
        this.container = combocontainer;
        this.toggle = combotoggle;

        // Add to arraylist "Add-item" in first position
        this.data.unshift("Add-item");
       
        // Instantiate DataSources
        var BDS = new YAHOO.util.LocalDataSource(this.data);
       
        //  dataSource.responseType = YAHOO.util.LocalDataSource.TYPE_TEXT;
       
        // Optional to define fields for single-dimensional array
        BDS.responseSchema = {
            fields: ["name"]
        };
       
        var oConfigs = {
            prehighlightClassName: "yui-ac-prehighlight",
            useShadow: true,
            queryDelay: 0,
            minQueryLength: 0,
            animVert: .01
        }
       
        // Instantiate AutoCompletes
        var BAC = new YAHOO.widget.AutoComplete(this.input, this.container, BDS, oConfigs);
        BAC.resultTypeList = false;
       
       
       
        // Part COMBOBOX
        // My combobox
        var bToggler = YAHOO.util.Dom.get(this.toggle);
        var oPushButtonB = new YAHOO.widget.Button({
            container: bToggler
        });
        var toggleB = function(e){
            // YAHOO.util.Event.stopEvent(e);
            if (!YAHOO.util.Dom.hasClass(bToggler, "open")) {
                YAHOO.util.Dom.addClass(bToggler, "open")
            }
           
            // Is open
            if (BAC.isContainerOpen()) {
                BAC.collapseContainer();
            }
            // Is closed
            else {
                BAC.getInputEl().focus(); // Needed to keep widget active
                setTimeout(function(){ // For IE
                    BAC.sendQuery("");
                }, 0);
            }
           
            // Control ComboBox    Toggler
            BAC.containerCollapseEvent.subscribe(function(){
                YAHOO.util.Dom.removeClass(bToggler, "open")
            });
           
            // Select and Add-item
            BAC.itemSelectEvent.subscribe(myHandler);
           
        }
        oPushButtonB.on("click", toggleB);
        //}   
        // Part HANDLER
        // Define an event handler to populate a hidden form field
        // when an item gets selected
       
        var myHandler = function(sType, aArgs){
            this.myAC = aArgs[0]; // reference back to the AC instance
            this.elLI = aArgs[1]; // reference to the selected LI element
            this.oData = aArgs[2]; // object literal of selected item's result data
            if (this.oData.name == "Add-item") {
                dialog1.show(true);
               
            }
           
        };
    }
        // Add and control DialogBox
        //YAHOO.util.Event.onDOMReady(initDialogBox);
       
        // Part DIALOGBOX
        // define the init function which creates the Dialog Box
        function initDialogBox(){

        //var datasources = this.initCombo.data;
        //alert (datasources);
       
            // Define various event handlers for Dialog
            var handleSubmit = function(){
                this.submit();
            };
            var handleCancel = function(){
                this.cancel();
            };
            var handleSuccess = function(o){
                var response = o.responseText;
                response = response.split("<!")[0];
                document.getElementById("resp").innerHTML = response;
            };
            var handleFailure = function(o){
                alert("Submission failed: " + o.status);
            };
           
            // Instantiate the Dialog
            this.dialog1 = new YAHOO.widget.Dialog("dialog1", {
                width: "30em",
                fixedcenter: true,
                visible: false,
                constraintoviewport: true,
                buttons: [{
                    text: "Submit",
                    handler: handleSubmit,
                    isDefault: true
                }, {
                    text: "Cancel",
                    handler: handleCancel
                }]
            });

            // Validate the entries in the form to require that new item is entered and no exist
            dialog1.validate = function(){
                var data = this.getData();
                var arrayaddlist = data.newitem;

                for (var i = 0; i < datasources.length; i++) {                    if (data.newitem datasources[i].name || data.newitem datasources[i]) {
                        alert("Your new item already exist.");
                        formReset();
                        return false;
                    }
                }
               
                if (data.newitem == "") {
                    alert("Please enter your new item.");
                    return false;
                }
               
                else {
                    datasources.push(arrayaddlist);
                    YAHOO.util.Dom.get("bInput").value = arrayaddlist;
                    formReset();
                    return true;
                }
            };
           
            // Wire up the success and failure handlers
            dialog1.callback = {
                success: handleSuccess,
                failure: handleFailure
            };
           
            // Render the Dialog
            dialog1.render();
        }
       
        // Add and control DialogBox (ancienne localisation)
        YAHOO.util.Event.onDOMReady(initDialogBox);
       
       
        // Useful javascript function
        // Function to reset the Form
        function formReset(){
            document.getElementById("dialog").reset();
        }
0
Rejoignez-nous