2011-08-26 3 views
1

J'ai cette fonction qui transforme les cellules avec la classe modifiable (td.editable) en champs de saisie. Maintenant, vous devez passer la ligne à la fonction. Par exemple: editRow(myRow). Donc en utilisant this.parentNode.id, j'obtiens l'identifiant de la ligne. Mais quand je passe la valeur en paramètre à la fonction editRow, elle ne fait rien.Comment passer une variable en tant que paramètre de fonction

Je pense que la fonction pense que rowId est le nom réel de la ligne, au lieu d'utiliser le contenu de la variable rowId comme nom de la ligne.

function editRow(row) { 
$('td.editable',row).each(function() { 
    $(this).html('<input type="text" value="' + $(this).html() + '" size="10" />'); 
}); 
}  

/* click on cell with .editable class */ 
$(".editable").click(function() { 
    rowId = this.parentNode.id; 
    editRow(rowId); 
}); 

Répondre

4

editRow ne prend pas un identifiant de ligne, il faut une ligne entière (l'élément DOM lui-même). Vous transmettez simplement les mauvaises données. Essayez:

$('.editable').click(function(){ 
    editRow(this.parentNode); 
}); 
+0

1 - me devança :-) –

+0

Eh oui. ['jQuery (sélecteur, [contexte])'] (http://api.jquery.com/jQuery/) - "** contexte ** - Un élément DOM, Document, ou jQuery à utiliser comme contexte" – Wiseguy

+0

Merci Tout pour vos solutions. Cela fonctionne bien maintenant! Je viens d'avoir 2 autres problèmes maintenant. 1) Si je clique sur la ligne, cela fonctionne comme prévu. Mais si je clique sur une autre ligne, elle passe en mode d'édition, mais la ligne sur laquelle j'ai cliqué en premier reste également en mode édition, alors maintenant j'ai deux lignes ou plus en éditer plus. J'ai essayé 'return false' mais ça n'aide pas. 2) Si je clique deux fois ou plus sur la même ligne, il continue d'ajouter des champs de saisie. Quelqu'un peut-il m'aider avec ces s'il vous plaît? – leonel

0

Compte tenu de votre fonction ici:

/* click on cell with .editable class */ 
$(".editable").click(function() { 
rowId = this.parentNode.id; 
editRow(rowId); 
}); 

Vous passez l'identifiant à votre fonction EditRow. Donc, à l'intérieur EditRow, vous pouvez simplement faire ceci:

function editRow(row) { 
    $('#' + row +' td.editable').each(function() { 
     $(this).html('<input type="text" value="' + $(this).html() + '" size="10" />'); 
    }); 
} 

'#' est le sélecteur id jquery

Questions connexes