2017-10-27 5 views
0

この質問は複数回回答されましたfor example。しかし、それらのどれもが任意の点での挿入に対処していない。ボタンをクリックすると、任意の位置のテキスト入力にどのように特殊文字を挿入しますか?

文字入力やテキストエリア、キーボードにない記号(例えばpi)のボタン、またはテキストが強調表示されている場合はアクセント記号やその他の発音区別記号を追加するボタンがある場合。どのように現在のキャレットの位置または選択位置に挿入しますか?ユーザーがカーソルを移動し、マウスがクリックされると、入力にフォーカスが失われ、キャレットまたは選択が削除されます。あなたは.selectionStart(強調表示されたテキストの開始インデックス)と.selectionEnd(強調表示されたテキストの終了インデックスを)したいよう

<input id="formula" type="text"> 
<button onclick="insertIntoFormula">π</button> 
+0

どこのソースコードは、入力内の選択したテキストをターゲット/返すことですか? – NewToJS

+0

おそらく、この[** JsFiddle Demo **](http://jsfiddle.net/eaozwuv6/)があなたの役に立つかもしれませんか? – NewToJS

+0

@NewToJSこれは、入力がフォーカスを失うという問題のために、(キャレット位置ではなく)文字列の先頭にシンボルを挿入します。それはどのように回避するのか分からない問題です。 – qw3n

答えて

1

が鳴ります。それがちょうどカーソルの場合、両方ともその位置を返します。

function insertIntoFormula(specialChar) { 
 
    const textarea = document.getElementById('formula'); 
 
    const insertStartPoint = textarea.selectionStart; 
 
    const insertEndPoint = textarea.selectionEnd; 
 
    let value = textarea.value; 
 
    
 
    // text before cursor/highlighted text + special character + text after cursor/highlighted text 
 
    value = value.slice(0, insertStartPoint) + specialChar + value.slice(insertEndPoint); 
 
    textarea.value = value; 
 
}
<input id="formula" type="text"> 
 
<!-- remember to actually pass the special character --> 
 
<!-- (you *could* just get the innerText of the triggering button but I wouldn't recommend it) --> 
 
<button onclick="insertIntoFormula('π')">π</button> 
 
<button onclick="insertIntoFormula('é')">é</button>

+0

フォーカスがボタンに切り替えられても、キャレット位置を保持するのは誰ですか? – qw3n

+0

@ qw3n上記のコードスニペットを実行し、どのように動作するかを確認することができます。フォーカスがボタンに切り替えられると、キャレットの位置が記憶されます。 (ただし、その後のクリックでは、常にキャレットの位置が開始位置にリセットされているように見えます。ユーザーが頻繁にボタンを2回クリックすると思われる場合は、追加のコードを追加する必要があります。 – SamVK

関連する問題