我正在将 Opa 用于一个学校项目,其中必须在几个用户之间对文本字段进行一些同步。解决此问题的简单方法是,只要其中一位用户执行更改,就传输完整的字段。更好的方法当然是只传输更改。
我的想法是在文本字段中使用插入符号位置。当用户键入时,可以根据插入符号的位置(只是插入符号之前的字符)获取最后键入的字符。DOM 元素有一个易于使用的字段,称为 selectionStart。我有这个小Javascript:
document.getElementById('content').selectionStart
如果插入符号位于字段中的第五个字符,则正确返回 5。在 Opa 中,我不能在 DOM 或 dom_element 上使用 selectionStart,所以我想我会写一个小插件。结果是这样的:
##extern-type dom_element
##register jsGetCaretPosition: dom_element -> int
##args(node)
{
return node.selectionStart;
}
这与 opp-builder 一起编译没有任何问题,当我将这一小行代码放入我的 Opa 脚本时:
#pos = %%caret.jsGetCaretPosition%%(Dom.of_selection(Dom.select_id("content")));
这也可以毫无问题地编译。但是,当我运行脚本时,它总是返回“未定义”,我不知道我做错了什么。我查看了 API,Dom.of_selection(Dom.select_id("content"))
看起来是获取相应 dom_element 类型数据以提供给插件的正确方法。插件返回“未定义”的事实似乎表明所选元素不知道成员“selectionStart”,尽管我在 Javascript 中的测试代码另有建议。任何人都可以帮忙吗?