2014-10-04 72 views
2

我不確定我是否瘋了,或者這是否是IE11中的錯誤。輸入scrollLeft在IE11中永遠不會改變

  • 打開該演示在IE11:輸入http://jsfiddle.net/zdfubscf/1/

    var $span = $('span'); 
    $('input').on('keyup', function() { 
        $span.html(
         this.scrollLeft + ', ' + 
         this.scrollWidth + ', ' + 
         this.selectionEnd 
        ); 
    }); 
    
  • 開始打字。

  • 當文本溢出時,您會注意到scrollLeftscrollWidth值不會改變。

<!DOCTYPE html>設置正確。有什麼我失蹤,以獲得正確的滾動值?

回答

2

我也在尋找解決這個問題的方法。我花了一段時間才找到你的問題(並在尋找解決方案的同時)。

在此期間,我可以與您分享我找到的一些小工作。

使用在一個文本下面的CSS屬性和行數設置爲1。

<textarea id="demo1" cols="40" rows="1" style="white-space: nowrap; overflow: hidden;">Lorem ipsum dolor sit amet, vulputate molestie nec dui.</textarea> 

這將允許您使用文本區域,如果它是文本類型的輸入。 ScrollLeft在textarea中可以用於IE。

如果您碰巧在IE> 9中找到了輸入scrollLeft屬性的替代方法,請分享! 我希望這個解決方法對您有所幫助。

+0

謝謝!這是一個有用的替代方案...我很確定這是一個IE11的bug現在;) – Mottie 2014-12-06 05:38:19

+0

@Mottie,沒問題。我將在此期間使用此替代方案。我正在尋找解決mistic100/jquery-highlighttextarea插件中的錯誤。錯誤定義在https://github.com/mistic100/jquery-highlighttextarea/issues/35 – 2014-12-07 20:12:14

2

看來,IE只有 「TextRange的」 對象(在邊緣不建議使用)可以與IE瀏覽器11的幫助:

var getScrollLeftAndScrollWidth = function (inputElement) { 
    var range = inputElement.createTextRange(); 
    var inputStyle = window.getComputedStyle(inputElement, undefined); 
    var paddingLeft = parseFloat(inputStyle.paddingLeft); 
    var paddingRight = parseFloat(inputStyle.paddingRight); 
    var rangeRect = range.getBoundingClientRect(); 
    var scrollLeft = inputElement.getBoundingClientRect().left + inputElement.clientLeft + paddingLeft - rangeRect.left; 
    var scrollWidth = Math.max(inputElement.clientWidth, paddingLeft + (rangeRect.right - rangeRect.left) + paddingRight); 
    return {scrollLeft: scrollLeft, scrollWidth: scrollWidth}; 
}; 
相關問題