更新输入的插入符位置并在放置事件上插入文本

2024-05-07

背景

我正在尝试拖放<div>里面的元素<input>使用 jQuery UI Draggable 和 Droppable 组件。目前,我必须将插入符号放在我希望文本出现的位置,然后拖放<div>进入<input>.

Question

我不是 100% 确定这是否可以做到,但我想做的是让插入符号在我拖动时自动更新其位置<div>的文本之间<input>.

jsFiddle 示例在这里... http://jsfiddle.net/Seany84/pnRyY/

CSS

.draggable
{
    width: 250px;
    height: 20px;
    background-color: #e6eaff;
    border: 2px solid #3399cc;
    margin-bottom: 1em;
    padding: 4px;
    cursor: default;
}

.active
{
    border: 2px solid #6699ff;
}

#droppable
{
    font-size: 14pt;
    width: 400px;
}

#droppableHolder
{
    margin-top: 5em;
}

HTML

<div class="draggable">Text 1</div>
<div class="draggable">Text 2</div>
<div class="draggable">Text 3</div>
<div class="draggable">Text 4</div>
<div id="droppableHolder">
    Drop in the text box below:<br />
    <br />
    <input type="text" id="droppable" value="INSERT ANYWHERE" />
</div>​

JavaScript

$(".draggable").draggable({
    revert: true,
    //revert: false,
    helper: 'clone',
    start: function(event, ui) {
        $(this).fadeTo('fast', 0.5);
        //$(this).css('cursor', 'text');
        //$(this).hide();
    },
    stop: function(event, ui) {
        $(this).fadeTo(0, 1);
        //$(this).show("explode", { pieces: 16 }, 2000);
    }
});

$("#droppable").droppable({
    hoverClass: 'active',
    drop: function(event, ui) {
        //this.value += $(ui.draggable).text();
        //alert($("#droppable"));
        insertAtCaret("droppable", $(ui.draggable).text());
    },
    over: function(event, ui) {
        //$(this).css('cursor', 'text');
    }
});

function insertAtCaret(areaId,text) {
    var txtarea = document.getElementById(areaId);
    var scrollPos = txtarea.scrollTop;
    var strPos = 0;
    var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? 
        "ff" : (document.selection ? "ie" : false ) );
    if (br == "ie") { 
        txtarea.focus();
        var range = document.selection.createRange();
        range.moveStart ('character', -txtarea.value.length);
        strPos = range.text.length;
    }
    else if (br == "ff") strPos = txtarea.selectionStart;

    var front = (txtarea.value).substring(0,strPos);  
    var back = (txtarea.value).substring(strPos,txtarea.value.length); 
    txtarea.value=front+text+back;
    strPos = strPos + text.length;
    if (br == "ie") { 
        txtarea.focus();
        var range = document.selection.createRange();
        range.moveStart ('character', -txtarea.value.length);
        range.moveStart ('character', strPos);
        range.moveEnd ('character', 0);
        range.select();
    }
    else if (br == "ff") {
        txtarea.selectionStart = strPos;
        txtarea.selectionEnd = strPos;
        txtarea.focus();
    }
    txtarea.scrollTop = scrollPos;
}
​

jsFiddle 示例在这里... http://jsfiddle.net/Seany84/pnRyY/


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新输入的插入符位置并在放置事件上插入文本 的相关文章

随机推荐