(IE 特定)如何确定输入的文本是否比输入元素的宽度长
(IE Specific) How to determine if entered text is longer then input element's width
这是IE特有的问题,所有版本。在所有其他浏览器中,当文本溢出时,输入元素的 scrollWidth 大于输入元素的 clientWidth。
有没有办法确定输入字段中的文本是否溢出了 IE 中输入元素宽度的绑定?
下面是一个简单的例子来检查客户端宽度与滚动宽度
var myInput = document.body.querySelector('#myInput');
myInput.value = 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem';
function checkInputSize() {
alert('Client Width: ' + myInput.clientWidth + ''n' +
'Scroll Width: ' + myInput.scrollWidth);
}
<div>
<input id="myInput"></input>
</div>
<button onclick="checkInputSize()"
style="margin-top: 2em;">
<span>Display Input Size</span>
</button>
我希望有一种更直接的方法来确定上述内容,而无需将样式忠实地复制到另一个元素。我知道这可能是"最佳"选择,但我真的很想给IE带来怀疑它比这更好的好处。
如果我需要复制样式,最好的选择是使用 window.getComputedStyle,尽管 IE8 不支持此功能,这对我来说不是问题。
var getJsStyleName = function(styleName) {
var firstCharacterRegex = new RegExp('^.');
styleName = styleName.split('-');
for (var i = 1; i < styleName.length; i++) {
styleName[i] = styleName[i].replace(firstCharacterRegex, styleName[i][0].toUpperCase());
}
return styleName.join('');
};
var copyComputedStyles = function(toElement, fromElement) {
var comStyle = window.getComputedStyle(fromElement) );
for (var i = 0; i < comStyle.length; i++) {
var styleName = getJsStyleName(comStyle[i]);
toElement.style[ styleName ] = comStyle[ styleName ];
}
return toElement;
}
var inputStyledDiv = copyComputedStyles(document.createElement('div'), inputElement);
我已经检查了IE中的所有计算样式,使用的文本会溢出输入框,也不会溢出输入框。 所有样式都相同。
另一种方法是复制div 中的输入内容,并查看其 clientWidth 是否比输入的 clientWidth 宽。 您必须小心复制div 中所有输入的样式。
下面的代码通过遍历myInput
的currentStyle
来实现。 此属性在 Chrome 中不可用,在这种情况下,它会恢复为scrollWidth
> clientWidth
逻辑。
function checkInputSize() {
var contents= document.querySelector('#contents');
var output= document.querySelector('#output');
var st= myInput.currentStyle;
if(st) {
for(var i in st) {
contents.style[i]= st[i];
}
contents.innerHTML= myInput.value;
output.innerHTML= contents.clientWidth+(contents.clientWidth >= myInput.clientWidth ? ': overflow' : '');
contents.style.display= 'none';
}
else {
output.innerHTML= myInput.scrollWidth+(myInput.scrollWidth > myInput.clientWidth ? ': overflow' : '');
}
}
小提琴
相关文章:
- Javascript获取具有不同id的文件数's来自没有多个属性的文件输入元素
- 访问代码生成的输入元素上的keyup事件
- 使用 jQuery,当我在输入框外部单击时,如何更改输入元素的值
- 使用jQuery切换来显示内容,但防止在用户单击输入元素时关闭
- 如何使用角度事件处理程序引用输入元素的值
- 获取javascript中输入元素的索引
- 为什么Bootstrap typeahead不适用于具有相同ID的输入元素
- 如何使用javascript在输入元素中显示特殊字符
- 动态添加的输入元素不会在脚本中返回值
- 使用 jQuery 禁用除表单中的某些输入元素之外的所有输入元素
- 将焦点设置为输入元素角度 js
- 如何仅在输入元素具有焦点时才启动 setInterval
- 即使使用 parseInt,我也无法从输入元素中获取数值
- 通过应用自定义 css 类禁用 html 输入元素
- 聚合物 - 访问自定义元素内的 DOM 输入元素
- HTML-输入元素中不可删除的占位符
- 使用jquery将属性附加到输入元素
- 如果所有其他元素都填写在AngularJS中,如何动态添加新的输入元素
- 什么是输入元素上的innerHTML
- 输入元素模式属性的Javascript正则表达式在reFiddle上有效,但在页面上无效