Заполните текстовое поле нажатием кнопки - PullRequest
1 голос
/ 22 января 2012

решено

http://jsfiddle.net/ArtofLife/u9d9d/

У меня есть несколько TEXTAREA и КНОПКА снаружи. Для вставки строки в текстовое поле я использовал плагин jQuery (insertAtCaret).Как заполнить ТОЛЬКО последний нажатый текст TEXTAREA с текстом ...?

<textarea name="answer_text[0]" cols="50" rows="3" style="width: 99%;">
    AAA
</textarea>

<textarea name="answer_text[1]" cols="50" rows="3" style="width: 99%;">
    BBB
</textarea>

<textarea name="answer_text[2]" cols="50" rows="3" style="width: 99%;">
    CCC
</textarea>

<textarea name="answer_text[3]" cols="50" rows="3" style="width: 99%;">
    Here should be:
    &lt;button class=insert name=insert&gt;Insert&lt;/button&gt; 
</textarea>

<button class=insert name=insert>Insert</button>

<script type="text/javascript">
jQuery.fn.extend({
insertAtCaret: function(myValue) {
    return this.each(function(i) {
        if (document.selection) {
            //For browsers like Internet Explorer
            this.focus();
            sel = document.selection.createRange();
            sel.text = myValue;
            this.focus();
        }
        else if (this.selectionStart || this.selectionStart == '0') {
            //For browsers like Firefox and Webkit based
            var startPos = this.selectionStart;
            var endPos = this.selectionEnd;
            var scrollTop = this.scrollTop;
            this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos, this.value.length);
            this.focus();
            this.selectionStart = startPos + myValue.length;
            this.selectionEnd = startPos + myValue.length;
            this.scrollTop = scrollTop;
        } else {
            this.value += myValue;
            this.focus();
        }
    });
}
});

var pos = 0;
$('textarea').click(function() {
//Get the name of this clicked item
var pos = $(this).attr("name");
$('.insert').click(function() {
    $('textarea[name^="' + pos + '"]').insertAtCaret('Actual button code');
});
return false;
});
</script>

Теперь я получил все текстовые области, которые я нажал ... http://jsfiddle.net/ArtofLife/u9d9d/15/

Я хочу заполнитьтолько последняя текстовая область, которая была нажата, а не всплывающая переменная pos ..

1 Ответ

0 голосов
/ 22 января 2012

Это потому, что у вас есть обработчик .insert click внутри обработчика textarea click.Всякий раз, когда вы нажимаете textarea, присоединяется новый обработчик, который продолжает присоединяться, как и когда вы нажимаете любой textarea.Переместите его наружу, он будет работать нормально.

var pos = 0;
$('textarea').click(function() {
    //Get the name of this clicked item
    pos = $(this).attr("name");
    return false;
});
$('.insert').click(function() {
    $('textarea[name^="' + pos + '"]').insertAtCaret('Actual button code');
});

Демо

...