dijit.form.TextBox Добавляет строки по нажатию кнопки на основе последнего выбора

Как сохранить позицию курсора даже после потери фокуса в dijit.form.TextBox? У меня есть текстовое поле и кнопка в моей форме. Когда я нажимаю на кнопку, я хочу добавить текст в это текстовое поле в определенной позиции курсора, которую я сохранил.

Я хочу что-то вроде этого: http://jsfiddle.net/NE4Ev/6/ но это не работает в Internet Explorer. Кто-нибудь может помочь?

2 ответа

Слушайте TextBox's 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);
        });


    });


});

Вот ссылка на скрипку:

http://jsfiddle.net/NE4Ev/6/

Другие вопросы по тегам