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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top