2013-06-28 4 views
0

Sur mon formulaire asp.net, dans une ligne de tableau et ajouter des cellules au sein de ces cellules ajouter un attribut avec textboxes comme -ligne spécifique attribue jQuery

string residentId = (new GUID()).ToString(); 
string houseId = (new GUID()).ToString(); 

HtmlTableRow detailRow = new HtmlTableRow(); 
detailRow.Attributes.Add("residentId", residentId); 
detailRow.Attributes.Add("houseId", houseId); 

HtmlTableCell dataCell = new HtmlTableCell(); 

TextBox tb = new TextBox(); 
tb.Attributes.Add("componentname", "tbMoveInDate"); 

tb.Attributes.Add("onchange", "updateMoveInDate()"; 

cell.Controls.Add(tb); 
detailRow.Cells.Add(dataCell); 

avec une possiblilité de plus de 100 lignes, tous les avec des identifiants distincts bien sûr.

dans mon javascript j'ai cette fonction -

function updateMoveInDate() { 
    var MoveInDateEle = $("[componentname*='tbMoveInDate']"); 
} 

à ce stade MoveInDateEle est une collection de toutes les zones de texte dans la table et

var currentRow = $("[componentname*='tbMoveInDate']").parent().parent(); 

me donne toutes les lignes. mais pas ma rangée spécifique.

Comment est-il possible d'obtenir la zone de texte spécifique avec laquelle je travaille et l'ID et l'ID de résidence spécifiques associés à ce contrôle?

+0

Êtes-vous en cliquant sur la ligne que vous travaillez avec ou qu'est-ce que 'travailler with' signifie? Est-ce que la zone de texte sera ciblée? Pourriez-vous m'expliquer un peu plus? Merci – edhedges

Répondre

1

Vous pouvez faire

tb.Attributes.Add("onchange", "updateMoveInDate(this)"; 

Et

function updateMoveInDate(txt) { 
    var $txt = $(txt); 
    var $row = $txt.closest('tr'); 
    var residentId = $row.attr('residentId'); 
    var houseId = $row.attr('houseId'); 
} 
+0

Parfait. Merci! – duckmike

2

Modifier le code C# comme ceci:

tb.Attributes.Add("onchange", "updateMoveInDate(this)"; 

et la fonction js comme:

// obj here refers to the current textbox in the scope 
// on which the on-change event had occurred... 
function updateMoveInDate(obj) { 
    var currentRow = $(obj).closest('tr'); 
} 
+0

@edhedges C'est parce que OP utilise '$ (" [componentname * = 'tbMoveInDate'] ")' qui fait référence à toutes les zones de texte mais nous utilisons ici le mot-clé 'this', qui fait référence à l'élément dans la portée courante, pas à la collection complète. –

0

Essayez cette

tb.Attributes.Add("onchange", "updateMoveInDate(this)"; 

dans le code derrière

string residentId = (new GUID()).ToString(); 
    string houseId = (new GUID()).ToString(); 

    HtmlTableRow detailRow = new HtmlTableRow(); 
    detailRow.Attributes.Add("residentId", residentId); 
    detailRow.Attributes.Add("houseId", houseId); 

    HtmlTableCell dataCell = new HtmlTableCell(); 

    TextBox tb = new TextBox(); 
    tb.Attributes.Add("componentname", "tbMoveInDate"); 

    tb.Attributes.Add("onchange", "updateMoveInDate(this)"; 

    cell.Controls.Add(tb); 
    detailRow.Cells.Add(dataCell); 

jQuery:

function updateMoveInDate(args) { 
    var MoveInDateEle = $(args).closest('tr'); 

}