2011-01-24 57 views
5

我有這個代碼珍聞:Chrome + jQuery:Div不刷新?

var clickHandler = function(e) { 
    var el = e.target; 
    if(el == $highlightBox[0]) { 
     $highlightBox.hide(); 
     el = document.elementFromPoint(e.clientX, e.clientY); 
     $highlightBox.show(); 
    } 
    $frame.append(getSelector(el) + '<br/>'); 
} 

當我點擊一個元素,它增加了一些文字$frame(這僅僅是一個div)。問題是,它不會刷新,直到我將鼠標移到它上面。我如何強制刷新?

+0

一個jsfiddle測試用例可能會有用。 – ThiefMaster 2011-01-24 00:26:50

+0

@ThiefMaster:在jsfiddle中複製真的很難......它被燒成了一個Chrome擴展。 – mpen 2011-01-24 00:33:48

回答

3

我是有鉻和jQuery類似的問題,我正在採取一個元素,填充其內容通過$('#myElem').html(content);

我發現的是,div的實際的innerHTML被正確地更新,但屏幕WASN令人耳目一新。我可以突出顯示div中的文本,並看到我最初看到的內容(舊的不正確的文本)實際上只是一個仍在屏幕上的工件,但突出顯示的文本是應該覆蓋的正確文本原本的。

最簡單的修復方法是強制頁面刷新整個控件。我通過修改實際元素的外觀來做到這一點。

這裏是(使用代碼)爲我工作的修補程序的一個例子:

var clickHandler = function(e) { 
    var el = e.target; 
    if(el == $highlightBox[0]) { 
     $highlightBox.hide(); 
     el = document.elementFromPoint(e.clientX, e.clientY); 
     $highlightBox.show(); 
    } 
    $frame.append(getSelector(el) + '<br/>'); 

    // My Add to force re-rendering of control 
    $frame.height($frame.height() + 1); // re-renders control 
    $frame.height($frame.height() -1); // resets to original height 
} 
1

我發現Chrome不喜歡操縱隱藏的元素。嘗試通過其他方式隱藏它(可見性,不透明度)。即

var clickHandler = function(e) { 
    var el = e.target; 
    if(el == $highlightBox[0]) { 
     $highlightBox.css('opacity', 0); 
     el = document.elementFromPoint(e.clientX, e.clientY); 
     $highlightBox.css('opacity', 1); 
    } 
    $frame.append(getSelector(el) + '<br/>'); 
} 

我知道這不等同於塊級隱藏,但試試看它是否是同樣的問題。

+0

這是'$ frame',不會刷新。最後一行代碼是有問題的。 '$ frame`永遠不會隱藏,所以...我不認爲這是問題所在。 – mpen 2011-01-24 01:24:54

1

很晚的談話,但我發現做一個簡單的頁面滾動修復鉻刷新問題:

var y = $(window).scrollTop(); 
$(window).scrollTop(y+1); 

如果你擔心的1個像素的偏移,你可以隨時滾動回來......

1

從這個answer下面這行工作對我來說:

$('#parentOfElementToBeRedrawn').hide().show(0);