在.detach()和.append()之后使用.load()不能按预期工作

时间:2014-12-29 09:39:20

标签: javascript jquery

我在我的Javascript中使用.load()方法遇到了麻烦,它在页面加载时工作正常,但是在我分离相应的元素并再次追加它之后,该方法不再起作用了。您可以在下面看到我的代码:

<script type="text/javascript">

(function () {

    var div = $('#exhibitions');
    var max = @Model.Total;
    var count = 0;

    div.find('.show-more').click(function () {
        div.find('.more-exhi').hide().load('@Url.Action("Exhibitions", "Exhibition")', { year: $(this).attr('data-year') } ).fadeIn('1500');
        div.find('.show-less').show();
        $('.more-exhi').attr('class', 'less-exhi');
        count++;
        if (count == max) {
            div.find('.show-more').hide().detach().hide();
        }
    });

    div.find('.show-less').click(function () {
        var button = div.find('button.show-more').detach();

        div.find('.more-exhi').fadeOut('1500');
        div.find('.less-exhi').fadeOut('1500');
        div.find('.show-less').hide();
        div.find('.holder').append(button);
        div.find('.show-more').attr('data-year', '@DateTime.Now.Year');
    });

})();
</script>

我使用了调试器,但就调试而言:没有错误,一切都应该正常工作。但是,当我跨过加载新内容的代码部分(第10行)时,没有任何内容被添加到页面中(但我确信load()方法具有有效的内容调用)。

我知道事件有效,因为此函数中的其他方法仍然可以正常工作。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

第一次处理点击时,您可以通过执行以下操作完全替换more-exhi类与less-exhi的任何元素上的所有类:

$('.more-exhi').attr('class', 'less-exhi');

......然后再从未将more-exhi放回其他地方。因此,在随后的点击中,此行变为无操作:

div.find('.more-exhi').hide().load('@Url.Action("Exhibitions", "Exhibition")', { year: $(this).attr('data-year') } ).fadeIn('1500');

...因为div.find('.more-exhi')找不到任何元素。