2012-08-15 73 views
1

我正在使用qunit框架进行单元测试,这是我在Chrome中使用jQuery(即var $ textarea = $(''))以编程方式创建的HTML交互。这里是我用来更新textarea中的选择的代码。单元测试中的Javascript setSelectionRange没有像预期的那样运行

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”

我很困惑这里发生了什么。我已经阅读了textarea元素上的Mozilla's documentation,我相信我对setSelectionRange的调用是有效的。难道这不知何故与我以编程方式创建了textarea并且实际上并未显示的事实有关?

回答

2

找到这个问题的答案,因为我打字的问题,所以我想我会分享的人谁可以在此绊倒。答案很明显,我在我的最后一句中基本上碰到了:我正在用$('')创建一个textarea DOM元素并存储该对象,但我从未将该对象插入到文档中。在将元素附加到主体后,setSelectionRange按预期更新选择。在我的情况下,在我的单元测试结果页面上显示实际的textarea并不是很理想,但是通过调用$ textarea.hide()可以很容易地解决这个问题。

相关问题