web-dev-qa-db-fra.com

Noms de variables dynamiques en javascript

J'ai variable:

var variableDynamic = 1;
// or    
var variableDynamic = 1 + i++;

Est-il possible de l'utiliser pour créer des noms de variables dynamiques, par exemple:

var variableName + variableDynamic = {};
// or
var (variableName + variableDynamic) = {};

Je sais que ce que j'ai écrit ci-dessus est absurde, mais c'est pour expliquer l'idée. C'est possible?


Ok, ce que je veux faire pour créer un élément (formulaire de téléchargement) chaque fois que l'utilisateur clique sur ajouter un nouveau groupe de fichiers, tout fonctionne correctement, sauf que le plug-in que j'utilise nécessite une variable spéciale pour chaque formulaire de téléchargement afin de déclencher le bouton de téléchargement ();).

C'est un code approximatif que j'ai fait:

    $('#addOneMoreFileOrGroup').on('click', function(){

    var latestFileUploaderId = parseInt($('.well-large .file-uploader').last().attr('id').split('-')[2]) + 1;

    $('.well-large .control-group:last').after('<div class="control-group deal-type-online">  \
        <label class="control-label">File / File Group Title:</label> \
        <div class="controls"> \
            <input class="span4 file-title" type="text"> \
            <span class="question label label-warning" data-title="File / Group Name:" data-content="Name for your file or group of related files (for example your brand logotype in different file formats)." data-original-title="">?</span> \
            <div id="file-uploader-' + latestFileUploaderId + '" class="file-uploader"></div> \
        </div> \
    </div>');

    var HERE_I_NEED_DYNAMIC_VAR = new qq.FileUploader({
        element: document.getElementById('file-uploader-' + latestFileUploaderId + ''),
        action: 'do-nothing.htm',
        autoUpload: false,
        debug: true,
        uploadButtonText: '<i class="icon icon-plus"></i> Select Files...',
        onSubmit: function() {

            $('#file-uploader-' + latestFileUploaderId + ' .qq-uploader').after('<button id="file-uploader-trigger-' + latestFileUploaderId + '" class="btn btn-primary"><i class="icon-upload icon-white"></i> Upload now</button>');

            $('#file-uploader-trigger-' + latestFileUploaderId + '').on('click', function() {

                if($(this).parent().parent().parent().parent().find('.file-title').val() !== '') {
                    HERE_I_NEED_DYNAMIC_VAR.uploadStoredFiles();
                } else {

                    $(this).parent().parent().parent().addClass('error');

                }

            });

        }
    });

});

}
13
ignaty

En JavaScript, les propriétés d'un objet peuvent être accessibles via obj.prop ou obj['prop'].

Dans la portée globale, toutes les variables sont des enfants de la propriété window. Vous pourrez donc faire:

var variableDynamic = 'Test';
window['variableName' + variableDynamic] = 'your value';

Découvrez ce violon .

Toutefois, si vous souhaitez limiter la portée de cette variable à une fonction, vous devez définir un objet parent et l'utiliser à la place de window.

29
Connell

Vous pouvez créer des variables dynamiques avec eval.

eval("dynamic" + i + " = val[i]");

Regardez aussi ceci: Utiliser les noms de variables dynamiques en JavaScript

16
sainiuc

Je ne pense pas que eval() soit nécessairement mauvais, il est parfois mal utilisé. Son travail consiste à prendre une chaîne et à la placer "eval en code JavaScript ( MDN ), de sorte que iff vous devez définir des variables de manière dynamique. eval() est une méthode pour le faire. :

var t = 't';
var four = '4';
eval('var ' + (t + four) + ' = "some value";');
console.log(t4);

// returns "some value" to the console

Il existe probablement de meilleures méthodes pour effectuer des paires variable dynamique + valeur, notamment parce que les chaînes de code eval sont mises en œuvre au niveau global, mais que ce qui précède fonctionne. La question est, est-ce la meilleure méthode pour ce que vous voulez atteindre (?). Voir ce billet de blog 2013 de NCZOnline pour une discussion de `eval () '.

4
Brian Peacock

Pour cela, vous pouvez utiliser eval(). Mais eval() est diabolique. Vous devriez utiliser un tableau pour des choses comme ça.

Exemple:

var i = 1337;
eval('var myvar' + i + ' = \'value\';');

alert(myvar1337);
4
Thomas Kekeisen

Pour ajouter à FAngels answer, vous pouvez utiliser la notation entre crochets n'importe où. Cela signifie qu’en plus d’utiliser window['var'], vous pouvez utiliser this['var'].

4
Awesomeness01

Vous ne savez pas exactement comment cela pourrait être fait dans la portée de la fonction, mais une variable globale pourrait être créée comme ceci:

window[variableName + variableDynamic] = {}
3
Viktor S.

Je ne pense pas que vous puissiez créer des noms de variables dynamiques en javascript, mais vous pouvez définir les attributs d'objet par chaîne. Ainsi, si vous créez vos variables dynamiques en tant qu'attributs d'un objet, vous pouvez atteindre votre objectif.

1
Scott Saunders