问题:如何获取输入到如下所述创建的文本框中的字符串中的换行符?
动机:我正在尝试对FireFox扩展程序(Zotero)进行一些非常简单的修改,以便我更容易使用。此扩展程序允许您通过在项目框中键入项目并按Enter键来输入项目的标记。我希望能够一次性输入一堆标签,将它们作为字符串粘贴到文本框中,新行作为标记之间的分隔符。之所以选择换行,是因为其他字符是在标签本身中使用的可行选择。
问题:当我将字符串粘贴到条目文本框中时,它会删除所有换行符并用单个空格替换它们。我无法在扩展代码中找到发生这种情况的任何地方,因此我认为它是文本框本身的属性。我正在尝试查找此文本框的文档以查看是否有一些我可以使用的属性,以便我可以捕获换行符,但我对JavaScript和HTML不是很熟悉并且无法找到任何内容。我想找到可能性最小的解决方案(一个不会改变文本框当前用于键入新条目并按下输入的方式),以便可以将此修改用于扩展的核心版本。
资源:到目前为止,我在网上讨论类似问题的唯一方法是this other question关于允许文本框中的标签而不是新行。我不确定这是否是一个HTML问题(是否有可以设置为允许保留换行符的属性?)或JavaScript问题(我是否需要重写下面引用的代码?)。我一直在努力查看两者的文档,但到目前为止还没有找到任何内容(大多数HTML教程都讨论textarea而不是文本框)。
代码:这里是创建文本框对象的代码(或者是方法还是表单?)我正在处理:
<method name="showEditor">
<parameter name="elem"/>
<body>
<![CDATA[
// Blur any active fields
/*
if (this._dynamicFields) {
this._dynamicFields.focus();
}
*/
Zotero.debug('Showing editor');
var fieldName = 'tag';
var tabindex = elem.getAttribute('ztabindex');
var tagID = elem.parentNode.getAttribute('id').split('-')[1];
var value = tagID ? Zotero.Tags.getName(tagID) : '';
var itemID = Zotero.getAncestorByTagName(elem, 'tagsbox').item.id;
var t = document.createElement("textbox");
t.setAttribute('value', value);
t.setAttribute('fieldname', fieldName);
t.setAttribute('ztabindex', tabindex);
t.setAttribute('flex', '1');
// Add auto-complete
t.setAttribute('type', 'autocomplete');
t.setAttribute('autocompletesearch', 'zotero');
var suffix = itemID ? itemID : '';
t.setAttribute('autocompletesearchparam', fieldName + '/' + suffix);
var box = elem.parentNode;
box.replaceChild(t, elem);
// Prevent error when clicking between a changed field
// and another -- there's probably a better way
if (!t.select) {
return;
}
t.select();
t.addEventListener('blur', function () {
document.getBindingParent(this).blurHandler(this);
}, false);
t.setAttribute('onkeypress', "return document.getBindingParent(this).handleKeyPress(event)");
this._tabDirection = false;
this._lastTabIndex = tabindex;
return t;
]]>
</body>
</method>
答案 0 :(得分:2)
这个问题实际上是关于XUL,而不是HTML。可以在此处找到文本框对象的文档:
https://developer.mozilla.org/en/XUL/textbox
需要设置的属性是换行符。通过将其设置为“pasteintact”,可以保留换行符。
答案 1 :(得分:0)
我不熟悉firefox扩展,但常规文本框不会删除换行符。
那里还有其他事情发生。可能是用于创建验证字符的标签的东西。
您需要更仔细地阅读源代码以找到它发生的位置,但这不是由于文本框(除非扩展名有异常)。