Как я могу изменить значение переменной, встроенной в функцию?

Я использую всплывающую функцию javascript календаря, которая используется в нашем приложении. У меня есть страница, которая использует всплывающее окно в модальном режиме Bootstrap.

В настоящее время, если пользователю нужно прокрутить страницу вниз, затем открыть модальное окно, затем нажать кнопку, чтобы вызвать всплывающее окно календаря, всплывающий календарь «появляется» над прокруткой (т.е. если вы оставили модальное окно открытым и прокрутил до конца, календарь выровнялся бы идеально).

Я взломал исправление, объявив дополнительное событие щелчка для кнопки, которая вызывает виджет календаря ( $('#show_cal').click( function(){ $('div.calendar').css('position', 'fixed'); } ); ). Я бы предпочел манипулировать базовой настройкой календаря, чтобы div календаря имел стиль position:fixed.

Итак, принимая во внимание следующий фрагмент кода JavaScript (в функции есть еще что-то, но, скорее всего, это не имеет значения), как я могу переопределить s.position как «фиксированное» (вместо «абсолютного»)?

    Calendar.prototype.showAtElement = function (el, opts) {
            function fixPosition(box) {
                    var cp = document.createElement("div");
                    var s = cp.style;
                    s.position = "absolute";
            };
    };

person Jeromy French    schedule 11.03.2014    source источник
comment
Я предполагаю, что вы ищете другой ответ, чем заменить эту строку на s.position = "fixed";? Пожалуйста, предоставьте лучшее объяснение вашей проблемы.   -  person Felix Kling    schedule 11.03.2014
comment
Я не понимаю, что изменить, как именно, это не совсем переменная, это стиль?   -  person adeneo    schedule 11.03.2014
comment
в чем именно твоя проблема?   -  person Alaeddine    schedule 11.03.2014
comment
Что-то подсказывает мне, что этот код неверен; вы не возвращаете и не вызываете внутреннюю функцию fixPosition.   -  person Mathletics    schedule 11.03.2014
comment
Извините, ребята, я опустил подробности в интересах краткости. Добавил детали...   -  person Jeromy French    schedule 11.03.2014
comment
Программно ничего не сделаешь. Вы можете перезаписать функцию своей собственной реализацией. Лучшим подходом, вероятно, будет рефакторинг кода, чтобы он каким-то образом принимал значение позиции в качестве аргумента.   -  person Felix Kling    schedule 11.03.2014


Ответы (1)


Единственный способ сделать это, если у вас нет доступа к коду, в котором определен календарь, чтобы вы могли заменить значение, — это переопределить функцию новой, которая делает то, что вы хотите. Добавьте следующее ПОСЛЕ определения календаря, но до использования метода showAtElement:

Calendar.prototype.showAtElement = function (el, opts) {
        function fixPosition(box) {
                var cp = document.createElement("div");
                var s = cp.style;
                s.position = "fixed";
        };
};
person Tibos    schedule 11.03.2014