当单击按钮时,将文本插入到<textarea>中,光标位置不变。

3

我有一个带有几个按钮的 <textarea>,这些按钮的目的是将某些文本插入到 <textarea> 中。

下面的代码总是在 <textarea> 的开头插入所需的文本,如果单击按钮时它没有焦点,则可以正常工作。但是,如果 <textarea> 有焦点,我想在单击按钮时将文本插入到光标所在的位置。

以下是我的代码。如果有人能建议我需要如何做到这一点,我将非常感激。谢谢。

jQuery(document).ready(function(){

    var button_text = {} // The text to insert for each button click

    button_text['insert_event_name']        = 'event_name';
    button_text['insert_event_date']        = 'event_date';
    button_text['insert_event_start_time']  = 'event_start';
    button_text['insert_event_finish_time'] = 'event_finish';
    button_text['insert_event_location']    = 'event_location';
    button_text['insert_event_address']     = 'event_address';

    jQuery('.inserter', '#event-desc-container').on('click', function(){

        var button = jQuery(this).attr('name');
        var text = '['+button_text[button]+']';

        textarea = jQuery('textarea#event_desc', '#event-desc-container');
        desc = textarea.val()

        textarea.val(text+desc);

    });

});

https://dev59.com/ZE_Sa4cB1Zd3GeqP-0Aa#3308539 - Tim Down
不起作用,因为一旦我按下按钮,文本区域就失去了焦点,因此 selectionStartselectionEnd 等都是 undefined。谢谢。 - David Gard
是的,所以你需要想办法防止这种情况发生。在大多数浏览器中,调用focus()函数并在click事件上调用preventDefault()函数可以解决问题。在IE中添加unselectable="on"属性也可以解决问题。或者,您可以使用mousedown事件来代替。 - Tim Down
https://dev59.com/vVvUa4cB1Zd3GeqPtGiV - Tim Down
Tim,这就是这个问题的基础 - 我不知道如何防止它!无论如何,现在已经解决了。谢谢。 - David Gard
这是一个简单的修复,我认为最好尝试理解它,而不是扔jQuery插件。 - Tim Down
1个回答

5

无法工作。无论如何使用它,您都会在第190行(Firefox 22.0)收到错误消息“无效的'in'操作数”。谢谢。 - David Gard
奇怪。你试过demo.html了吗?如果我理解正确,那正是你要找的东西。 - grmmph
我收回我的评论,那是我的编码错误。现在已经成功地解决了,并且只用了两行代码!感谢您的提示。 - David Gard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接