2014-10-04 73 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}; 
}; 
相关问题