我最近遇到了一个相当讨厌的错误,其中代码是<select>通过JavaScript动态加载的.这种动态加载<select>具有预先选择的值.在IE6中,我们已经有了修复所选内容的代码<option>,因为有时它<select>的selectedIndex值与所选<option>的index属性不同步,如下所示:
field.selectedIndex = element.index;
Run Code Online (Sandbox Code Playgroud)
但是,此代码无效.即使selectedIndex正确设置了字段,最终也会选择错误的索引.但是,如果我alert()在正确的时间插入声明,则会选择正确的选项.考虑到这可能是某种时间问题,我尝试了一些随机的东西,我之前在代码中看到过:
var wrapFn = (function() {
var myField = field;
var myElement = element;
return function() {
myField.selectedIndex = myElement.index;
}
})();
setTimeout(wrapFn, 0);
Run Code Online (Sandbox Code Playgroud)
这有效!
我已经找到了解决问题的方法,但是我很不安,因为我不知道为什么这会解决我的问题.有人有官方解释吗?使用"稍后"调用我的功能可以避免哪些浏览器问题setTimeout()?
我想为用户提供resizing textarea控件.我已经给了这个去看看其他一些实现,但我似乎找不到满足我所有要求的实现.具体来说,我想要一个控件:
我看到的最接近这种功能的是Facebook的状态更新字段,它是作为内容可编辑的div元素实现的,但我对使用这样的元素有一些保留,因为使用div意味着:
我上面列出的内容代表了"最终调整文本区域" - 解决了我认为现有方法存在的问题.这样的控制存在吗?是否可以编写这样的控件?
我希望有一个文本区域,它总是和文本一样大.因此页面可以滚动,并且在文本区域中无法滚动.
这是我到目前为止所做的事情:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
html, body {height: 100%;}
textarea {
border: none;
width: 100%;
height: 100%;
-webkit-box-sizing: border-box;
line-height: 44px;
font-family:Helvetica;
font-size: 17pt;
-webkit-tap-highlight-color: rgba(0,0,0,0);
background-image:url('linedBack@2x.png');
outline: none;
resize: none;
}
textarea.vert { resize:vertical; }
</style></head><body>
<textarea id="InputTextArea" placeholder="placeholder"></textarea>
</body></html>
Run Code Online (Sandbox Code Playgroud) 建议的副本是我得到这个问题的基础的问题,所以它不是重复的!事实上,我从一开始就已经把这个问题联系起来了......
好的编辑:
我做了一个JSFiddle(我第一次:)).注意textarea如何不按照人们的意愿扩展.在textarea中键入内容,它会立即调整大小.
如果我们可以自动发送按键事件,它可能会工作......(这个相关问题没有帮助,答案没有效果).
我在这里使用textareaas as .然后,我从一个文件中读取并将内容放在文本框中,但它没有按原样调整大小.
我像这样更新文本框:
function updateTextbox(text) {
$('#cagetextbox').val(text);
};
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我在Ubuntu 12.04上使用firefox 34.0规范,如果它扮演一些角色,我希望不是这样,因为我的一些用户使用Chrome.
编辑:
尝试写这样的东西:
$('#cagetextbox').attr("rows", how many rows does the new text contain);
Run Code Online (Sandbox Code Playgroud)
请注意,如果我们试图找出textarea包含多少行文本,我们将得到1作为答案.
EDIT_2
也许是这样的width/(length_of_line * font_size).对于一些测试,它似乎是正确的,如果我减去1(当然只保留结果的整数部分).
textarea 在插入文本时可以调整它的高度吗?
我想隐藏 textarea 的边框,以便用户感觉他们在无限空间中输入。
(当新行开始时,textarea 的高度应增加一行的高度)
我猜的一种方法是;在每次击键时将所有文本复制到具有相同宽度的 div 中,然后测量 div 的高度,然后为 textarea 设置 div 的高度。
我注意到的一个问题是,滚动条宽度应该从主宽度中减去,在不同的设备上,我们有 0 到 16px 的可变滚动条宽度......,有什么建议吗?
javascript ×5
css ×3
html ×2
autoresize ×1
debugging ×1
dom ×1
event-loop ×1
jquery ×1
widget ×1