2010-10-02 16 views
0

Ceci est mon Javascript:jQuery onclick avec des paramètres donne "** n'est pas défini"

function doSomething(fieldActions) { 
var Actions = fieldActions; 

$(Actions).show("slow"); 
$(this).hide(); } 

Ceci est dans mon HTML:

<a onclick="doSomething('#date-actions');">edit</a> 

Le paramètre doit affecter et sur le terrain DIV. L'ID de ce champ peut être variable et il peut y avoir plusieurs sur une page, c'est pourquoi je dois donner le champ spécifique sur lequel il affecte. Le paramètre "# date-actions" est un exemple de ce que peut être appelé un champ DIV auquel il appelle.

Mon erreur dans Firebug:

doSomething is not defined 

Répondre

1

Actuellement où doSomething est défini ce n'est pas une fonction globalement accessible, par exemple si elle est à l'intérieur d'un gestionnaire document.ready il est accessible uniquement à l'intérieur de là. Vous auriez besoin d'exposer la portée ... mais même alors, this ne ferait pas référence à ce que vous vouliez dans la fonction.


Une meilleure approche pour résoudre les deux problèmes serait d'utiliser la propriété href du lien lui-même, comme ceci:

<a class="edit" href="#date-actions">edit</a> 

Puis en lui donnant une classe, comme dans l'exemple ci-dessus, vous peut lier tous ces liens sur document.ready comme ceci:

$(function() { 
    $("a.edit").click(function(e) { 
    $(this).hide(); 
    $(this.hash).show(); 
    e.preventDefault(); 
    }); 
}); 

Si elles sont ajoutées dynamiquement simplement changer la liaison $("a.edit").click(function(e) {-$("a.edit").live("click", function(e) {.

+0

Merci Nick. Mais que dois-je faire si j'ai plus de paramètres à passer? – user260157

+0

@ user260157 -Pouvez-vous donner un exemple? vous pouvez faire 'data-show =" # chose1, # chose2, # chose3 "' comme sélecteur multiple, par exemple, et utiliser '$ ($ (this) .attr (" data-show ")). show() 'l'utiliser. –