1

我正在使用 Andy Langton 的显示/隐藏 jQuery 代码,但是当您在同一页面上使用多个切换时,该代码看起来有些小故障。

当使用多个显示/隐藏时,它不会切换到正确的单词。它似乎整体跟踪最后一次切换,而不是每个链接的设置。换句话说,如果我在第一篇文章上点击“更多”,它将变为“更少”。如果我在下一篇文章上按“更多”而不隐藏上一篇,它将停留在“更多”,如果我现在尝试隐藏第一篇文章,那个词仍然是“少”。

这是我正在使用的代码:

// Andy Langton's show/hide/mini-accordion - updated 23/11/2009
// Latest version @ http://andylangton.co.uk/jquery-show-hide
$(document).ready(function() {

    // choose text for the show/hide link - can contain HTML (e.g. an image)
    var showText='MORE ↓';
    var hideText='LESS ↑';

    // initialise the visibility check
    var is_visible = false;

    // append show/hide links to the element directly preceding the element with a class of "toggle"
    $('.toggle').prev('.moree').append('<a href="#" class="toggleLink">'+showText+'</a>');

    // hide all of the elements with a class of 'toggle'
    $('.toggle').hide();

    // capture clicks on the toggle links
    $('a.toggleLink').click(function() {

    // switch visibility
    is_visible = !is_visible;

    // change the link depending on whether the element is shown or hidden
    $(this).html( (!is_visible) ? showText : hideText);
    //$(this).html( ($(this).html() == hideText) ? showText : hideText);

    // toggle the display - uncomment the next line for a basic "accordion" style
    //$('.toggle').hide();$('a.toggleLink').html(showText);
    $(this).parent().next('.toggle').toggle('slow');

    // return false so any link destination is not followed
    return false;

    });
    });

任何解决此问题的帮助将不胜感激。

马兹

4

4 回答 4

1

代码中的问题是

使用相同的 varis_visible来切换元素。

每次切换内容的可见性时,我们都必须检查相应 div 的可见性。

    $(this).html( ($(this).parent().next('.toggle').is(":visible")) ? showText : hideText);

看到它在行动

于 2012-08-18T07:36:58.200 回答
1

做了一些重写,这更有意义:

$(function() {
    var showText = 'MORE &darr;',
        hideText = 'LESS &uarr;';

    $('.toggle').hide().prev('.moree')
                .append('<a href="#" class="toggleLink">' + showText + '</a>');

    $('a.toggleLink').click(function(e) {
        e.preventDefault();
        var is_visible = $(this).closest('.moree').next('.toggle').is(':visible');
        $(this).html(is_visible ? showText : hideText)
               .parent().next('.toggle').toggle('slow');
    });
});​

小提琴

于 2012-08-18T07:38:19.837 回答
0

该代码实际上有一个标志用于检查所有隐藏 DIV 的可见性。需要检查被切换的特定 div 当前是否隐藏

    // change the link depending on whether the element is shown or hidden
    if( $(this).parent().next(".toggle").is(':visible') ) {
              $(this).html(showText);
    }
    else{
              $(this).html(hideText);   
    }

我已经更新了小提琴来检查这个

更新了 jsfiddle

于 2012-08-18T07:34:33.077 回答
0

问题是布尔is_visible。如果您单击第一个链接,则其设置为 false。如果您单击第二个元素(而不再次单击第一个元素),它仍然是错误的。

于 2012-08-18T07:36:57.860 回答