質問:下記のように作成されたテキストボックスに入力された文字列の改行を取得するにはどうすればよいですか?XULのテキストボックスでの改行のキャッチ
動機:私は、FireFox拡張機能(Zotero)を簡単に修正して、使いやすくしています。この拡張機能では、アイテムをテキストボックスに入力してEnterキーを押してタグを入力できます。私はタグの間に区切り文字として改行を含む文字列としてそれらをテキストボックスに貼り付けることによって、一度にたくさんのタグを入力することができるようにしたいと思います。改行が選択されたのは、他の文字がタグそのものに使用可能な選択肢であったからです。
問題:文字列を入力テキストボックスに貼り付けると、すべての改行が取り除かれ、1つのスペースで置き換えられます。私はこれが起こるどこに拡張コードのどこにも見つけることができないので、それはテキストボックス自体のプロパティだと思う。このテキストボックスのドキュメントを参照して、私が改行をキャッチできるようにすることができるいくつかのプロパティがあるかどうかを確認しようとしていますが、JavaScriptやHTMLに慣れていないため、私は、この変更がコアバージョンの拡張機能に採用されるように、最も侵襲性の低い解決策を見つけたいと思っています(テキストボックスが現在新しいエントリを入力して入力する方法を変更しないもの)。
資源:これまでのところ、私がオンラインに同様の問題を議論発見した唯一のものは、改行をテキストボックスにタブを許可ではなく程度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'(http://jsfiddle.net/QmMPN/参照)です。拡張のコードで '\ r \ n 'を検索してみてください。 '
'タグをHTMLに入れない限り(またはHTML要素がインラインではなくブロックとして表示されていない限り)、HTMLコードの改行がブラウザに空白として表示されることもあります。コード内で改行に関連するものは何も表示されません。 –