识别不同文本区域中的光标位置,并在列表框中选择项目时插入文本

时间:2012-11-03 11:38:42

标签: jquery asp.net html

任何人都可以帮我吗?

我有一个.aspx页面,设计有两个文本区域控件和一个列表框控件。

<td>
    <p>Base Entity Attributes</p>
    <select name="drop1" id="SelectGroupApiS" size="4">
    </select>
</td>
<td>
    <p>REQUEST XML</p>
    <textarea id="txtAreaRequest" rows="" cols=""></textarea>
</td>
<td>
    <p>RESPONSE XML</p>
    <textarea id="txtAreaResponse" rows="" cols=""></textarea>
</td>

当我点击任何列表框项目时,我使用jquery将listitem的当前文本设置在TextArea中。但我希望文本位于包含光标位置的文本框中。 目前我做的是单文本框。我现在想要在包含光标位置的两个文本框之一中显示文本。

如何让它成功?

帮帮我吧

3 个答案:

答案 0 :(得分:0)

一种可能的解决方案是拥有最后一个焦点的textarea句柄,并在单击lsit项时使用此句柄。

即。

之类的东西
var $focusTA = null;
$('textarea').focus(function() {
    $focusTA = $(this);
});

并且

$focusTA.insertAtCaret($('#lis>option:selected').text());

用于设置文本。

答案 1 :(得分:0)

小提琴http://jsfiddle.net/tariqulazam/LBkcV/

<强> HTML

<td>
    <p>Base Entity Attributes</p>
    <select name="drop1" id="SelectGroupApiS" size="4">
        <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
    </select>
</td>
<td>
    <p>REQUEST XML</p>
    <textarea id="txtAreaRequest" class="tarea" rows="" cols=""></textarea>
</td>
<td>
    <p>RESPONSE XML</p>
    <textarea id="txtAreaResponse" class="tarea" rows="" cols=""></textarea>
</td>​

<强>的JavaScript

var activeArea;
$(document).ready(function(){
    activeArea = $("#txtAreaRequest");
});
$(".tarea").click(function(){
    activeArea = $(this);
}).focus(function(){
    activeArea = $(this);
});

$("#SelectGroupApiS").change(function(){
    $(activeArea).append($("#SelectGroupApiS option:selected").val());    
});

答案 2 :(得分:0)

如果我理解你的问题,你可以这样做:

$(document).ready(function(){$('#txtAreaRequest').focus()});

var dataTB = [];
$('textarea').blur(function() {
    dataTB[0] = this;
    dataTB[1] = getCaret(this);
});

$('#SelectGroupApiS').change(function() {
    var valTB =  $(dataTB[0]).val();    $(dataTB[0]).val(valTB.substring(0,dataTB[1])+$('option:selected',this).text()+valTB.substring(dataTB[1]));

});



function getCaret(node) {
    if (node.selectionStart) {
        return node.selectionStart;
    } else if (!document.selection) {
        return 0;
    }

    var c = "\001",
        sel = document.selection.createRange(),
        dul = sel.duplicate(),
        len = 0;

    dul.moveToElementText(node);
    sel.text = c;
    len = dul.text.indexOf(c);
    sel.moveStart('character', -1);
    sel.text = "";
    return len;
}

请参阅http://jsfiddle.net/mcDhE/