2014-09-18 3 views
1

je le code suivant:objet passe en tant que paramètre

$('.helloWorld').on('click', function() { 
    $(this).css('background', 'black'); 
}); 

Au lieu de cela, je voudrais faire quelque chose comme ça (pour la recherche):

var params = [ 
    'click', 
    function() { 
     $(this).css('background', 'black'); 
    } 
]; 

$('.helloWorld').on(params); 

Je reçois une erreur qui se lit, " Uncaught SyntaxError: Jeton inattendu,. "

Est-ce possible? Si c'est le cas, comment?

+0

double possible de [Appel fonction dynamique avec des paramètres dynamiques Javascript] (http://stackoverflow.com/questions/676721/calling- dynamic-function-with-dynamic-parameters-in-javascript) – dave

+0

Je pense que vous devez utiliser quelque chose comme '$ .fn.on.apply ($ (". selector "), params);', mais je suis peut-être éteint – Ian

+1

La question est, pourquoi utilisez-vous un tableau? Tant que le tableau ressemble à cela, avec un seul événement, vous pouvez utiliser 'apply', mais il semble beaucoup plus facile d'utiliser un objet, de cette façon vous pouvez ajouter autant d'événements et de rappels que vous le souhaitez. – adeneo

Répondre

4

Vous pouvez utiliser apply pour appeler une fonction en utilisant un tableau comme les arguments, vous devez spécifier l'thisArg si:

$.fn.on.apply($('.helloWorld'), params); 
+1

Pourquoi ne pas simplement référencer '$ .fn.on' au lieu de stocker les résultats du sélecteur? – Ian

+1

@Ian Bon point, c'est plus simple. – Paulpro

3

Vous utilisez un tableau dans votre exemple. Utilisez un objet à la place ({} au lieu de []) Quelque chose comme cela devrait fonctionner:

var params = { 
    "event" : 'click', 
    "callback" : function() { 
     $(this).css('background', 'black'); 
    } 
}; 

$('.helloWorld').on(params.event, params.callback); 
+1

Ils utilisent délibérément un tableau. La question n'est pas de savoir comment le faire différemment. C'est très possible avec un tableau, comme l'a montré Paulpro. Je ne dis pas que c'est une mauvaise alternative, mais cela ne répond pas vraiment à la question. Et s'ils vont utiliser un littéral d'objet, il serait plus sensé d'utiliser 'var params = {on: function() {....}}; $ (""). on (params); ' – Ian

+1

Compris, mais utilisent-ils délibérément un tableau? OP n'a jamais dit ça. – sma

+0

Hmmm, relisant, vous avez raison. Ce n'était pas aussi direct/spécifique que je me souvenais. Surtout parce qu'ils ont dit "pour la recherche". Je suppose que ce dont je parle plus est le fait qu'ils semblent vouloir passer un ** paramètre ** (c'est le titre, techniquement) à l'appel '.on()' - cela semble utile. Votre réponse utilise encore deux paramètres, il arrive juste de les stocker dans un seul endroit, au lieu de deux variables. – Ian