Передавать переменные между различными функциями - PullRequest
0 голосов
/ 12 марта 2011

Так что я пытался понять это часами!Я пытаюсь сделать универсальную функцию, где, если контент имеет только определенную высоту, и если пользователь нажимает «показать больше», он будет отображать весь контент, установив высоту на авто.Проблема в том, что я использую .toggle(), и для этого нужны две разные функции.Я хочу каким-то образом сохранить исходное значение высоты, изменить его высоту на автоматический, а затем восстановить первоначальную высоту, когда пользователь нажимает кнопку «Показать / Скрыть».На странице будут разные элементы div, поэтому мне нужно убедиться, что когда пользователь нажимает кнопку показать / скрыть, он будет ссылаться на ближайший элемент div.

Я пытался использовать .data() для передачи одной и той же информации через две отдельные функции, и каким-то образом это сработало в первый раз, когда я это сделал, но я не знаю, что происходит, и значение, хранящееся в .data can 't передается вместе с другой функцией.

Вот код:

    // When the user clicks the button with the class .more
    $('.more').toggle(

    //This stores the height of the original div and then sets it height to auto
    function (e) {
        e.preventDefault();

        // This will travel up to the parent and find the corrresponding content div and store its height in a variable oh(original height)
        var oh = $(this).parents('.parent')
            .find('.content').height();

        // im trying to get this information to be pass along the other function
        $(this).data('original_height', oh);


        $(this).$(this).parents('.parent')
            .find('.content')
            .css('height', 'auto');
        $(this).text('hide');
    },

        // This function restores the original height of the div 
    function (e) {
        e.preventDefault();

        // im trying to get the value of the original_height to be pass along into this function. Howw!!!! 
        var original_height_value = $(this).data('original_height')

        $(this).parents('.' + parent)
            .find('.' + content)
            .css('height', original_height_value + 'px');
        $(this).text('more');
    }
});

Ответы [ 2 ]

0 голосов
/ 12 марта 2011

Toggle не принимает две функции, только функцию обратного вызова: api.jquery.com / toggle

Просмотр вашего комментария для Hogan: В первой функции oh имеетправильное значение?

0 голосов
/ 12 марта 2011

Часть кода data() кажется мне подходящей. Что я не понимаю, так это две строки:

    $(this).$(this).parents('.parent').find('.content').css('height','auto');

и

    $(this).parents('.'+ parent).find('.' + content).css('height', original_height_value + 'px');

Что находится в переменных parent и content?

Разве эти две строки не должны искать одно и то же?

Кроме того, я не знаю, почему вы бы использовали $(this).$(this), $(this) должно быть хорошо само по себе.

...