2009-09-20 6 views
0

Ok, donc cela peut être une question stupide (probablement une certaine syntaxe), mais Google ne m'a pas dit beaucoup sur pourquoi cela ne fonctionne pas, alors voilà.Arbitrary-arguments JavaScript fonction de <head> pas accessible dans l'événement onclick

J'ai une fonction append _..._ fields qui prend une quantité arbitraire d'arguments, en premier lieu l'identifiant de quoi ajouter des champs, et tous les suivants sont juste des noms pour les champs. Il est piraté ensemble donc il y a probablement quelques choses que je pourrais améliorer. Cette fonction apparaît dans un type de script importé = « text/javascript » tag en tant que produit par des rails

append_widget_form_fields = function(a){ 
    var widget_el = $(arguments[0]); 
    var new_li = Element.new("li", class : widget_el.id, id : widget_el.id+"_new"); 
    for (var field in arguments) { 
    if (field == arguments[0]){} // ignore first arg. 
    else { //inserts fields into <li> 
     Element.insert(new_li, { bottom : get_input_box_from_field_name(field , widget_el.id)}); 
    } 
    } // inserts <li> into widget 
    Element.insert(widget_el, { bottom : new_li }); 
} 

De toute façon, je ne vois rien de mal avec elle en termes de la façon dont je le définis. J'ai essayé d'ajouter un var devant tout cela - n'a pas aidé. La façon dont la fonction est appelée est:

<input type="button" value="Add Fields" onclick="append_widget_form_fields('some_widget_id', 'headline', 'author', 'link');"/> 

question Addendum: JS erreur de syntaxe devrait quand quelque chose ne va pas avec la fonction, et non la ferraille la définition, correcte?

+0

Quel navigateur utilisez-vous? Firefox aura tendance à signaler des erreurs qui peuvent ne pas apparaître comme des erreurs dans le navigateur, par exemple. –

+0

Cette fonction est-elle appelée avant le chargement complet de la page? –

Répondre

1

Il y a quelques problèmes ici:

  1. append_widget_form_fields est non déclaré. Vous devez soit déclarer avec var ou le transformer en déclaration de fonction (à savoir function append_widget_form_fields(){...})

  2. Il n'y a pas méthode new sur Element dans Prototype.js. Cependant, Element peut être appelé comme constructeur - new Element(...).

  3. Probablement le problème principal ici est que vous utilisez class. class Le nom est réellement interdit syntaxiquement dans les littéraux d'objets (dans ES3, car il fait partie des "futurs mots réservés"). Vous devriez le citer - "class" - ou le remplacer par "className" (que Prototype.js comprend).

+0

Je ne sais pas lequel de ceux qui l'a corrigé (a également trouvé des déclarations d'élément sans accolades), mais c'est corrigé maintenant. Juste n'était pas habitué à JS venant de faire rubis directement pendant un mois et demi. Merci! –

Questions connexes