1

我正在使用 qunit 框架与我在 Chrome 中使用 jquery(即 var $textarea = $(''))以编程方式创建的 HTML 进行单元测试交互。这是我用来更新文本区域中的选择的代码。

    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”行后,对输入元素的检查显示 selectionEnd 和 selectionStart 属性 = 0, selectionDirection =“none”

我对这里发生的事情感到非常困惑。我已经阅读了Mozilla关于 textarea 元素的文档,并且我相信我对 setSelectionRange 的调用是有效的。这是否与我以编程方式创建了 textarea 并且它实际上没有显示的事实有关?

4

1 回答 1

2

在我输入问题时找到了答案,所以我想我会分享给任何可能偶然发现这个问题的人。答案很明显,我在最后一句话中基本上想到了:我正在使用 $('') 创建一个 textarea DOM 元素并存储该对象,但我从未将该对象插入到文档中。在我将元素附加到正文后, setSelectionRange 会按预期更新选择。在我的情况下,在我的单元测试结果页面上显示实际的 textarea 并不是很理想,但这很容易通过调用 $textarea.hide() 来解决。

于 2012-08-15T16:43:42.230 回答