dijit.form.TextBoxでフォーカスを失った後でもカーソル位置を保持する方法は? フォームにテキストボックスとボタンがあります。ボタンをクリックすると、保持している特定のカーソル位置のテキストボックスにテキストを追加したいと思います。
http://jsfiddle.net/NE4Ev/6/のようなものが欲しいのです が、これは Internet Explorer では機能しません。誰でも助けてもらえますか?
dijit.form.TextBoxでフォーカスを失った後でもカーソル位置を保持する方法は? フォームにテキストボックスとボタンがあります。ボタンをクリックすると、保持している特定のカーソル位置のテキストボックスにテキストを追加したいと思います。
http://jsfiddle.net/NE4Ev/6/のようなものが欲しいのです が、これは Internet Explorer では機能しません。誰でも助けてもらえますか?
TextBox のonblur
イベントをリッスンして、カーソル位置を保存します。
textBox.on("blur", function() {
var start = this.textbox.selectionStart,
end = this.textbox.selectionEnd;
this.set("cursorPosition", [start, end]);
});
その位置を使用して、カーソル位置にテキストを挿入したり、カーソル位置を復元しtextBox.focus()
たりできます.
textBox.on("focus", function() {
var cursorPosition = this.get("cursorPosition");
if(cursorPosition) {
this.textbox.setSelectionRange(cursorPosition[0], cursorPosition[1]);
}
});
jsFiddle で実際の例を参照してください: http://jsfiddle.net/phusick/rryEg/
あなたのニーズに合わせてphusickによる回答を修正しました。
しかし、ウィジェットでの cusron の選択について理解すれば、ここで行うことはほとんどありません。
HTML:
<input
id="textBox1"
data-dojo-type="dijit.form.TextBox"
value="some text here"/>
<button id="button1" data-dojo-type="dijit.form.Button">foo</button>
JavaScript:
require([
"dojo/ready",
"dijit/registry",
"dijit/form/TextBox",
"dijit/form/Button",
"dojo/domReady!"
], function(
ready,
registry
) {
ready(function() {
var textBox = registry.byId("textBox1"),
button = registry.byId("button1");
textBox.on("blur", function() {
var start = this.textbox.selectionStart,
end = this.textbox.selectionEnd;
this.curStart = start;
this.curEnd = end;
});
textBox.on("focus", function() {
var cursorPosition = [this.curStart,this.curEnd];
if(cursorPosition) {
this.textbox.setSelectionRange(cursorPosition[1], cursorPosition[1]);
}
});
button.on("click", function() {
var cur = [textBox.curStart,textBox.curEnd];
var val = textBox.get("value");
var str = val.substring(0,cur[0])+ 'foo' + val.substring(cur[1]);
textBox.set("value", str);
textBox.focus();
textBox.textbox.setSelectionRange(cur[0]+'foo'.length, cur[0]+'foo'.length);
});
});
});
フィドルリンクは次のとおりです。