2010-12-15 22 views
1

Je me demande comment il est possible d'appeler une fonction avec des paramètres dans une méthode. J'ai 2 fonctions et je voudrais appeler la fonction deleteCode() lorsqu'on clique sur l'élément de liste qui est créé par la fonction addCode(). Je suis sûr que la solution est vraiment simple, mais je ne peux pas la voir maintenant. Merci beaucoup!jQuery - fonction d'appel avec des paramètres dans la méthode

function addCode(code) { 
    $('#codeList').append('<li class="codeList" onClick="deleteCode(code);">' + code + '</li>'); 
} 

function deleteCode(code) { 
    $('#'+code).remove(); 
} 

Répondre

3

Faites-le discret et tout ira bien.

function addCode(code) { 
    $('#codeList').append($('<li>', { 
     'class': 'codeList', 
     'text':  code, 
     'click': function(e) { 
      deleteCode(code); 
     } 
    })); 
} 

Ref .: $()

0

Vous pouvez le faire comme ceci:

function addCode(code) { 
    $('<li class="codeList">' + code + '</li>').click(function() { 
     deleteCode(code); 
    }).appendTo('#codeList'); 
} 

function deleteCode(code) { 
    $('#'+code).remove(); 
} 

... ou plus simplement:

function addCode(code) { 
    $('<li class="codeList">' + code + '</li>').click(function() { 
     $('#'+code).remove(); 
    }).appendTo('#codeList'); 
} 

Lorsque vous utilisez une bibliothèque comme jQuery (ou même quand pas, franchement), il n'y a pratiquement aucune raison d'utiliser l'attribut onclick à l'ancienne es pour la configuration des gestionnaires. Dans ce qui précède, je l'ai remplacé par la fonction click, qui configure un gestionnaire lorsque l'utilisateur clique sur l'élément.

Remarque: Lazarus note que votre code supprime un élément par id en utilisant la valeur code:

$('#' + code).remove(); 

... mais que le code ne produit pas un élément à cet identifiant. Je suppose que vous avez ajouté cet élément avec un autre code ailleurs, et que l'objectif n'est pas de supprimer le li que vous avez ajouté avec ce code.

Si vous avez voulez supprimer ce même li sur clic, pas besoin d'une carte d'identité du tout:

function addCode(code) { 
    $('<li class="codeList">' + code + '</li>').click(function() { 
     $(this).remove(); // <== Changed here 
    }).appendTo('#codeList'); 
} 
+0

+1, ce que je frappe. La réponse de @Andy est une autre excellente façon de le faire. @Downvoter, c'est juste une mauvaise forme pour ne pas dire pourquoi vous avez voté. –

+0

jAndy est plus propre. :-) –

+0

Est-ce que le downvoter souhaite partager des commentaires utiles? –

0

Créer l'élément <li> via le code plutôt que HTML brut annexant.

function addCode(code) { 
    // Create the <li> 
    var newEl = document.createElement("li"); 
    newEl.className = "codeList"; 

    // Assign the click function via jquery's event helper. 
    $(newEl).click(function(code) { 
     // Call your deleteCode function and pass in the given parameter. 
     deleteCode(code); 
    }); 

    // Append the new element to the codeList node. 
    $(#codeList).append(newEl); 
} 
0

Vous pouvez essayer:

function addCode(code) { 
$('#codeList').append('<li class="codeList" onClick="deleteCode(' + code + ');">'+code+'</li>'); 
}