相关疑难解决方法(0)

为什么setTimeout(fn,0)有时会有用?

我最近遇到了一个相当讨厌的错误,其中代码是<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()

javascript dom event-loop

833
推荐指数
11
解决办法
23万
查看次数

正在寻找最终的Resizing Textarea

我想为用户提供resizing textarea控件.我已经给了这个去看看其他一些实现,但我似乎找不到满足我所有要求的实现.具体来说,我想要一个控件:

  • 当页面以标准兼容模式(即不在怪异模式下)呈现时,可在Windows上的IE6,IE7,IE8以及Windows和OS X上的Firefox 3和3.5中使用.
  • 不会搞乱undo buffer/undo stack.IE是一个特别令人讨厌的问题 - 添加节点,删除节点和其他一些DOM操作将重置输入缓冲区,这意味着如果实现依赖于这些技术,则撤销将不会像在标准textarea控件中那样运行.除了这个说明,我还没有找到关于这个bug的更多信息.像jQuery Auto Growing Plugin这样的实现遇到了这个问题 - 尝试撤消IE中的更改并比较它如何工作到标准textarea.我添加了一个向JSBin演示此问题的示例页面.
  • 具有最大高度,超过该高度,控件无法生长.
  • 删除内容时适当缩小.
  • 在按键上不闪烁或行为异常.例如,当控件超出初始大小时,jQuery Auto Growing Textarea控件的行为奇怪,至少是IE7.
  • 不要求控件使用固定宽度/等宽字体.

我看到的最接近这种功能的是Facebook的状态更新字段,它是作为内容可编辑的div元素实现的,但我对使用这样的元素有一些保留,因为使用div意味着:

  • 需要明确地设置边框样式,这意味着我们最终可能会得到一个看起来与原生textarea不同的边框.
  • 需要与真正的textarea同步内容(可能在两个方向?).
  • 在相对于textarea的位置放置提示和其他元素时添加复杂性.
  • 虽然这种方法适用于Facebook状态更新,但它在包含数百个标准输入元素的表单中的效果如何?

我上面列出的内容代表了"最终调整文本区域" - 解决了我认为现有方法存在的问题.这样的控制存在吗?是否可以编写这样的控件?

javascript widget

16
推荐指数
1
解决办法
5586
查看次数

HTML TextArea自动调整大小

我希望有一个文本区域,它总是和文本一样大.因此页面可以滚动,并且在文本区域中无法滚动.
这是我到目前为止所做的事情:

<!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)

html javascript css

12
推荐指数
1
解决办法
3万
查看次数

从文件中读取文本时强制调整大小

建议的副本是我得到这个问题的基础的问题,所以它不是重复的!事实上,我从一开始已经把这个问题联系起来了......


好的编辑:

我做了一个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(当然只保留结果的整数部分).

javascript css debugging autoresize

7
推荐指数
1
解决办法
878
查看次数

用文本增加 textarea 的高度

textarea 在插入文本时可以调整它的高度吗?

我想隐藏 textarea 的边框,以便用户感觉他们在无限空间中输入。

(当新行开始时,textarea 的高度应增加一行的高度)

我猜的一种方法是;在每次击键时将所有文本复制到具有相同宽度的 div 中,然后测量 div 的高度,然后为 textarea 设置 div 的高度。

我注意到的一个问题是,滚动条宽度应该从主宽度中减去,在不同的设备上,我们有 0 到 16px 的可变滚动条宽度......,有什么建议吗?

html javascript css jquery

5
推荐指数
1
解决办法
1199
查看次数

标签 统计

javascript ×5

css ×3

html ×2

autoresize ×1

debugging ×1

dom ×1

event-loop ×1

jquery ×1

widget ×1