jquery передавая $ (this) другим функциям - PullRequest
2 голосов
/ 10 января 2010

High!

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

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

Я, конечно, скучаю по чему-то очень простому или просто недостаточно хорошо знаю 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();
    });
}   

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

Есть идеи?

1 Ответ

5 голосов
/ 10 января 2010

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

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

должен сделать это.

...