我有一个文本,我有一个文本框,里面填充了一些文本,我想将其他文本拖到文本框中
我试图拖放,但是我将文本放置在光标位置而不是释放鼠标键的位置
这是我尝试过的:
JQUERY代码
$(document).ready(function () {
$("#DragWordList li").draggable({ helper: 'clone' });
$(".txtDropTarget").droppable({
accept: "#DragWordList li",
drop: function (ev, ui) {
$(this).insertAtCaret(ev,"[" + ui.draggable.text() + "]");
}
});
});
$( "#txtMessage2" ).mousemove(function( event ) {
var pageCoords = "( " + event.pageX + ", " + event.pageY + " )";
var clientCoords = "( " + event.clientX + ", " + event.clientY + " )";
$( "span:first" ).text( "( event.pageX, event.pageY ) : " + pageCoords );
$( "span:last" ).text( "( event.clientX, event.clientY ) : " + clientCoords );
});
$.fn.insertAtCaret = function (ev,myValue) {
return this.each(function () {
//IE support
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
}
//MOZILLA / NETSCAPE support
else if (this.selectionStart || this.selectionStart == '0') {
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.myTextBox.SelectionStart = 3;
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
});
};
HTML代码
<table border="0">
<tr>
<td valign="top">
<b>
Text Message Content</b><br />
<textarea name="txtMessage2" id="txtMessage2" class="txtDropTarget ui-droppable"
cols="40" rows="10">
this is some text ... </textarea>
</td>
<td> </td>
<td valign="top">
<fieldset id="leftcolumn" style="margin-top:10px;">
<legend>Drag to insert:</legend>
<ul id="DragWordList">
<li>Contact Name</li>
<li>Arranger Name</li>
<li>Location Name</li>
</ul>
</fieldset>
</td>
</tr>
</table>
预期的输出应该是将文本拖放到拖动后我释放鼠标按钮的位置
答案 0 :(得分:0)
用空格填充文本框,您便一切就绪。您不需要jQuery。
$(document).ready(function() {
$("#DragWordList li").draggable({
helper: 'clone'
});
$(".txtDropTarget").droppable({
accept: "#DragWordList li",
drop: function(ev, ui) {
$(this).insertAtCaret(ev, "[" + ui.draggable.text() + "]");
}
});
});
$("#txtMessage2").mousemove(function(event) {
var pageCoords = "( " + event.pageX + ", " + event.pageY + " )";
var clientCoords = "( " + event.clientX + ", " + event.clientY + " )";
$("span:first").text("( event.pageX, event.pageY ) : " + pageCoords);
$("span:last").text("( event.clientX, event.clientY ) : " + clientCoords);
});
$.fn.insertAtCaret = function(ev, myValue) {
return this.each(function() {
//IE support
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
}
//MOZILLA / NETSCAPE support
else if (this.selectionStart || this.selectionStart == '0') {
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.myTextBox.SelectionStart = 3;
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
});
};
<table border="0">
<tr>
<td valign="top">
<b>
Text Message Content</b><br />
<textarea name="txtMessage2" id="txtMessage2" class="txtDropTarget ui-droppable" style="overflow: hidden;resize: none;" cols="40" rows="10">I have a text here ANd I have a text here It doesn't matter if you have a text here it still works fine. Try this!
</textarea>
</td>
<td> </td>
<td valign="top">
<fieldset id="leftcolumn" style="margin-top:10px;">
<legend>Drag to insert:</legend>
<ul id="DragWordList">
<li>Contact Name</li>
<li>Arranger Name</li>
<li>Location Name</li>
</ul>
</fieldset>
</td>
</tr>
</table>