2010-01-10 4 views
2

Высокий!

Что я хочу сделать следующее: у меня есть таблица с привязкой к привязке к ссылке, которая находится в таблице четной строки. каждая нечетная строка скрыта. по щелчку по этой ссылке отображается нечетная строка и данные загружаются в эту строку. Хорошо работает

Теперь, что я хочу сделать, так это то, что всякий раз, когда этот процесс выполняется, я хочу прикрепить новую функцию щелчка к этой ссылке, которая снова закроет строку. Вид вроде переключения, но затем с некоторыми более просто показать/скрыть функциональность. Я попытался сделать это со следующим кодом, но не могу заставить его работать.

Я, конечно, пропустил что-то очень простое или просто не знаю jquery достаточно хорошо (это очень хорошо, потому что я только начал работать несколько недель назад).

$(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(); 
    }); 
} 

Он открывает строку таблицы, вставляет данные, но затем не прикрепляет функцию, чтобы снова закрыть строку. Как я могу заставить это случиться?

Любые идеи?

ответ

5

Проблема заключается в следующем:

$(this).click(function(){ 
    attachHideMyChildren(); 
}); 

При вызове функции, способ this становится window. Вместо этого:

$(this).click(attachHideMyChildren); 

Кроме того, вы добавляете click() обработчиков без удаления старых.

Это, как говорится, есть более простой способ сделать это.

$("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; 
}); 

необходимо сделать это.

+0

святое дерьмо! кто это сделал. Спасибо, cletus. –