【发布时间】:2012-02-17 05:27:08
【问题描述】:
问题:如何获取输入到如下所述创建的文本框中的字符串中的换行符?
动机:我正在尝试对 FireFox 扩展 (Zotero) 进行一些非常简单的修改,以使其更易于使用。此扩展程序允许您通过将标签输入文本框并按 Enter 来输入项目的标签。我希望能够一次输入一堆标签,方法是将它们作为字符串粘贴到文本框中,换行符作为标签之间的分隔符。选择换行符是因为其他字符是在标签本身中使用的可行选择。
问题:当我现在将一个字符串粘贴到输入文本框中时,它会删除所有换行符并用单个空格替换它们。我在扩展代码中找不到发生这种情况的任何地方,所以我认为它是文本框本身的属性。我正在尝试查找此文本框的文档,以查看是否有一些我可以使用的属性以便我可以捕捉换行符,但我对 JavaScript 和 HTML 不是很熟悉,并且找不到任何东西。我想找到可能侵入性最小的解决方案(一种不会改变文本框当前用于输入新条目并按 Enter 的方式的解决方案),以便可以将这种修改应用于扩展的核心版本。
资源: 到目前为止,我在网上发现的唯一一个讨论类似问题的是 this other question 关于在文本框中允许制表符而不是换行符。我不确定这是 HTML 问题(是否可以设置一个属性以允许保留换行符?)还是 JavaScript 问题(我需要重写下面引用的代码吗?)。我一直在尝试查看两者的文档,但到目前为止还没有找到任何东西(大多数 HTML 教程讨论的是文本区域而不是文本框)。
代码:这是创建文本框对象的代码(或者是方法还是表单?)我正在处理:
<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>
【问题讨论】:
-
JavaScript(以及许多其他编程语言)中的换行符是
\r\n(参见此处:jsfiddle.net/QmMPN)。尝试在扩展代码中搜索\r\n。这种情况也可能是 HTML 代码中的换行符在浏览器中显示为空格,除非您在 HTML 中放置<br>标记(或将 HTML 元素显示为块而不是内联)。我在代码中看不到任何与换行相关的内容。
标签: javascript firefox textbox firefox-addon xul