2009-07-23 10 views
0

Je pense que c'est une question assez simple, mais je suis aux prises avec ce problème.jQuery liaison d'événement dynamique

Sur mon formulaire, j'ai une option pour ajouter dynamiquement une nouvelle ligne à la table, ce qui est assez simple pour faire avec jQuery. Sur l'un des éléments, j'ai besoin de lier un événement, aussi relativement simple. La partie avec laquelle je rencontre des problèmes est que l'événement qui doit être lié doit prendre un paramètre. Ainsi, le code que j'ai:

$(newrow).find("select").each(function() { 
     var ochange = function(handle){ 
       var thisselect = "select" + handle; 
       var thislink = "link" + handle; 
       var thiscollate = "collate" + handle; 
       if(document.getElementById(thisselect).value == 4){ 
        document.getElementById(thislink).style.visibility = 'visible'; 
       } 
       else{ 
        document.getElementById(thislink).style.visibility = 'hidden'; 
        document.getElementById(thiscollate).value = ""; 
       } 
     }; 
     $(this).change(ochange); 
     $(this).attr("name", "select" + numfields); 
     $(this).attr("id", "select" + numfields); 
    }); 

L'événement se fixe comme prévu, mais la variable « poignée » n'enregistre pas (bien sûr parce que je suis sûr que c'est une syntaxe incorrecte). En outre, cette fonction que je veux lier à l'élément de formulaire dynamique est en fait déjà définie, donc s'il y a un moyen que je peux appeler une fonction déjà définie (qui prend un paramètre), j'aimerais en entendre parler.

Répondre

0

Dans votre code, la variable 'handle' est un objet jQuery, représentant un événement pour le changement de widget 'select'. Si vous voulez obtenir l'objet DOM qui a déclenché cet événement, utilisez l'attribut handle.target. Par exemple, pour obtenir son nom, utilisez l'attribut handle.target. Pour obtenir l'objet jQuery pour target - $ (handle.target).

référence complet pour les objets d'événement est here

0

Le premier paramètre d'une fonction de gestionnaire d'événements est le event object.

Si je comprends bien, fondamentalement, vous voulez transmettre une valeur à la fonction ochange.

Vous pouvez déclarer la handle variable dans le cadre de la chaque fonction de rappel et utiliser sa valeur sur la fonction ochange, puisque vous avez jQuery, vous pouvez l'utiliser dans cette fonction, et d'éviter les getElementById appelle:

$(newrow).find("select").each(function() { 

    var handle = "someValue"; // this variable will be accessible inside ochange 

    var ochange = function(){ 
    var thisselect = "select" + handle; 
    var thislink = "link" + handle; 
    var thiscollate = "collate" + handle; 
    if($(thisselect).val() == 4){ 
     $(thislink).css('visibility', 'visible'); 
    } 
    else{ 
     $(thislink).css('visibility', 'hidden'); 
     $(thiscollate).val(''); 
    } 
    }; 

    $(this).change(ochange); 
    $(this).attr("name", "select" + numfields); 
    $(this).attr("id", "select" + numfields); 
}); 
0

Vous pouvez fournir une fonction « aide »:

$(this).change(function (evt) { 
    ochange('someVal') 
    }); 

une autre option qui est un peu complexe, mais simple en même temps est leplug-in(qui quelque chose du genre va dans jQuery 1.3.3?)

Avec elle, vous pouvez faire quelque chose comme ceci:

var obj = { 
    attr: "blah", 
    myFunc: function(arg){ 
     console.log(this.attr + " " + arg); 
    } 
    } 
    $(this).change($.hitch(obj, "myFunc", "wheee")) 
Questions connexes