2011-10-26 6 views
2

質問:下記のように作成されたテキストボックスに入力された文字列の改行を取得するにはどうすればよいですか?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> 
+0

JavaScriptの改行(と他のプログラミング言語の束)は '\ r \ n'(http://jsfiddle.net/QmMPN/参照)です。拡張のコードで '\ r \ n 'を検索してみてください。 '
'タグをHTMLに入れない限り(またはHTML要素がインラインではなくブロックとして表示されていない限り)、HTMLコードの改行がブラウザに空白として表示されることもあります。コード内で改行に関連するものは何も表示されません。 –

答えて

2

この質問は実際にはHTMLではなくXULに関するものです。テキストボックスオブジェクトのドキュメントはここで見つけることができます:

https://developer.mozilla.org/en/XUL/textbox

に設定する必要があるプロパティは改行です。これを 'pasteintact'に設定することで改行を保持することができます。

0

私はFirefoxの拡張機能に精通しているが、規則的ではありませんよテキストボックスは改行を取り除きません。

そこには何か他のことがあります。おそらく、文字を検証するタグを作成するためのものです。

ソースをより詳細に読む必要がありますが、どこに何が起きているのかを確認する必要があります(ただし、拡張機能に異常がない限り)。

+0

私はタグを追加するコードを見てきました。 addTag()というメソッドがあります。このメソッドの冒頭に、タグ文字列を表示するためにアラート(tagString)を追加しました。この時点で、改行はすでに削除されています。上の引用符で囲まれたコードのdocument.createElement( "textbox")は、標準のHTMLテキストボックスを作成しますか?私はこのオブジェクトについてのより多くの情報を見つけることが、改行がどこから取り除かれているかを発見するのに役立つかもしれないと感じています。拡張機能のどこかで定義された関数があり、テキストから改行を取り除いていますが、タグに関してはどこにも呼ばれていません。 –

+0

その関数に警告を出し、実際に呼び出されないかどうかを確認します。 – Ariel

+0

私は試してみましたが、ポップアップしなかったので、少なくともその機能は使用していないと思います。 –