我正在使用qunit框架对我在Chrome中使用jquery (即var $textarea = $(''))以编程方式创建的超文本标记语言的交互进行单元测试。这是我用来更新文本区域中选择的代码。
TextAreaView.prototype.setSelectionOffsets = function(cursor) {
var input = this.$textarea.get(0);
if (!input.setSelectionRange) {
return;
}
if (cursor.start <= input.value.length && cursor.end <= input.value.length) {
input.focus();
input.setSelectionRange(cursor.start, cursor.end, "forward");
}
}我已经验证了我正在使用0< cursor.start == cursor.end < input.value.length调用此方法。
当我单步执行调试器时,看起来一切正常--但是在它到达"input.setSelectionRange“行之后,对input元素的检查显示selectionEnd和selectionStart properties=0,selectionDirection="none”
我对这里发生的事情感到非常困惑。我读过关于文本区域元素的Mozilla's documentation,我相信我对setSelectionRange的调用是有效的。这会不会与我以编程方式创建了文本区域,而它实际上并没有被显示这一事实有关?
发布于 2012-08-16 00:43:42
在我输入问题的时候,我找到了这个问题的答案,所以我想我将分享给任何可能偶然发现这个问题的人。答案很明显,我基本上是在最后一句话中偶然发现的:我正在使用$('')创建一个textarea DOM元素并存储该对象,但我从未将该对象插入到文档中。在我将元素附加到正文之后,setSelectionRange会按预期更新选择。在我的情况下,在我的单元测试结果页面上显示实际的文本区并不是很理想,但是通过调用$textarea.hide()很容易解决这个问题。
https://stackoverflow.com/questions/11973433
复制相似问题