SetExpression в Javascript - самая большая проблема для меня. Любое решение для преодоления этого - PullRequest
1 голос
/ 16 сентября 2010

Я пытаюсь заморозить свой заголовок gridview за последние 2 дня и получил эту ссылку и многие другие ссылки, предоставленные мне на Stackoverflow, а также от поиска в Google.Это работало нормально, когда я использовал его в IE 6,7 и в режиме совместимости в IE8, но в обычном режиме этот код не работает.

В этой строке выдается ошибка.Я хочу реализовать эту функциональность.

trs[x].style.setExpression("top",  "this.parentElement.parentElement.parentElement.scrollTop + 'px'");

При чтении комментариев я узнал, что scrollableTable.js использует метод setExpression, который в IE8 устарел.

Раньше я понятия не имел о проблеме.Я надеюсь, что будет какая-то альтернатива методу setExpression.

Как заменить метод setExpression другой альтернативой в этом коде

функция ScrollableTable (tableEl, tableHeight, tableWidth) {

this.initIEengine = function() {

    this.containerEl.style.overflowY = 'auto';
    if (this.tableEl.parentElement.clientHeight - this.tableEl.offsetHeight < 0) {
        this.tableEl.style.width = this.newWidth - this.scrollWidth + 'px';
    } else {
        this.containerEl.style.overflowY = 'hidden';
        this.tableEl.style.width = this.newWidth + 'px';
    }

    if (this.thead) {
        var trs = this.thead.getElementsByTagName('tr');
        for (x = 0; x < trs.length; x++) {
            trs[x].style.position = 'relative';
            trs[x].style.setExpression("top", "this.parentElement.parentElement.parentElement.scrollTop + 'px'");
        }
    }

    if (this.tfoot) {
        var trs = this.tfoot.getElementsByTagName('tr');
        for (x = 0; x < trs.length; x++) {
            trs[x].style.position = 'relative';
            trs[x].style.setExpression("bottom", "(this.parentElement.parentElement.offsetHeight - this.parentElement.parentElement.parentElement.clientHeight - this.parentElement.parentElement.parentElement.scrollTop) + 'px'");
        }
    }
    eval("window.attachEvent('onresize', function () { document.getElementById('" + this.tableEl.id + "').style.visibility = 'hidden'; document.getElementById('" + this.tableEl.id + "').style.visibility = 'visible'; } )");
};

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

Попробуйте это:

for (x=0; x < trs.length; x++) 
{
    trs[x].style.position = 'fixed';
    trs[x].style.top.setExpression = "this.offsetParent.scrollTop";
}

У меня это работает!

1 голос
/ 16 сентября 2010

Вместо этого вы должны попробовать плагин http://fixedheadertable.com/ jQuery. Это должно устранить любые кросс-браузерные проблемы и быть более перспективным.

0 голосов
/ 16 сентября 2010

Для той же мысли лучше использовать jQuery и выполнять ту же работу с jQuery, которая будет работать во всех браузерах, и отбрасывать setExpression.

Что-то вроде:

var MyMainControl = $(".StyleOf");
MyMainControl.attr("top", MyMainControl.parent(".TheKeeper").offset().top );

илиесли у вас их много

jQuery(document).ready(function() 
{
    jQuery(".StyleOf").each(function(i, selected) {
        var MyMainControl = $(selected);
        MyMainControl.attr("top", MyMainControl.parent(".TheKeeper").offset().top );
    }
}

Я думаю, что html - это что-то вроде

<div class="TheKeeper">
 <div>
   <div>
     <div class="StyleOf"></div>
   </div>
  </div>
</div>

setExpression для make css совместимой с ie6.

Конечно, вы можете получить другие готовые сетки заголовков ...:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...