jquery passaggio $ (this) ad altre funzioni
Domanda
Alta!
Quello che voglio fare è il seguente: Ho una tabella con un onclick collegato a un link che si trova nella tabella di una riga. ogni riga dispari è nascosto. su un click su questo link, la fila dispari viene mostrato e dati vengono caricati in quella riga. Funziona bene
Ora quello che voglio fare è che ogni volta che viene fatto questo processo, voglio allegare una nuova funzione di scatto a quella di collegamento che fa la fila nascosto di nuovo. Un po 'come a ginocchiera, ma poi con un po' di più quindi solo mostrare / nascondere la funzionalità. Ho provato a farlo con il seguente codice, ma non posso farlo funzionare.
I sicuramente manca qualcosa di molto semplice o semplicemente non so jquery abbastanza bene (che è molto bene possibile, perché ho appena cominciato per un paio di settimane fa).
$(document).ready(function(){
// The version icons
$("a.version").click(function () {
var sLink = $(this).attr("href");
var nexttr = $(this).parent().parent().next("tr.version");
var nexttrtd = nexttr.find("td:first");
$.get(sLink, function(sData){
nexttrtd.html(sData);
nexttr.show();
});
$(this).click(function(){
attachHideMyChildren();
});
return false;
});
});
function attachShowMyChildren()
{
var sLink = $(this).attr("href");
var nexttr = $(this).parent().parent().next("tr.version");
var nexttrtd = nexttr.find("td:first");
$.get(sLink, function(sData){
nexttrtd.html(sData);
nexttr.show();
});
$(this).click(function(){
attachHideMyChildren();
});
return false;
}
function attachHideMyChildren()
{
$(this).parent().parent().next("tr.version").hide();
$(this).click(function(){
attachShowMyChildren();
});
}
Si apre la riga della tabella, inserisce i dati, ma poi non allega la funzione di chiudere nuovamente la riga. Come posso ottenere questo accada?
Tutte le idee?
Soluzione
Il problema è questo:
$(this).click(function(){
attachHideMyChildren();
});
Quando si chiama una funzione in questo modo diventa this
window
. Invece fare questo:
$(this).click(attachHideMyChildren);
Inoltre, si sta aggiungendo i gestori click()
senza rimuovere quelli vecchi.
Detto questo, c'è un modo più semplice per farlo.
$("a.version").click(function() {
var next = $(this).closest("tr").next();
if (next.is(":hidden")) {
$.get($(this).attr("href"), function(sData) {
next.find("td:first").html(sData);
next.show();
});
} else {
next.hide();
}
return false;
});
dovrebbe circa farlo.