奇怪的问题,请问onclick和onkeydown的区别
请运行下面的代码:
我为textarea写了两和事件,一个是onclick事件,当你点击textarea的时候会alert一个string出来。第二个事件是onkeydown,和onclick事件调的同一个方法,但是就是出不来string,有谁写过关于teatarea的得到光标位置的代码。帮我看看!
源码如下,只要新建一个html文件,复制源码运行查看效果!
<html>
<head>
<title>textarea.jsp</title>
<script type="text/javascript">
function tellPoint() {
var rng = event.srcElement.createTextRange();
rng.moveToPoint(event.x, event.y);
rng.moveStart("character", -event.srcElement.value.length);
return rng.text.length;
}
function getString(){
var poin=tellPoint();
var str = textarea.value.substring(0,poin);
var indexstr = new Array();
indexstr[0]=' ';
indexstr[1]='.';
indexstr[2]='{';
indexstr[3]='}';
indexstr[4]='(';
indexstr[5]=')';
indexstr[6]=';';
indexstr[7]='&&';
indexstr[8]='&';
indexstr[9]='=';
indexstr[10]='!';
indexstr[11]='||';
indexstr[12]='|';
indexstr[13]='>';
indexstr[14]='<';
indexstr[15]='+';
indexstr[16]='-';
indexstr[17]='*';
indexstr[18]='/';
indexstr[19]='%';
indexstr[20]='^';
indexstr[21]='?';
indexstr[22]=',';
var index = new Array();
maxindex = -1;
for(var i = 0 ; i<indexstr.length;i++){
index[i] = str.lastIndexOf(indexstr[i]);
if(index[i]>maxindex){
maxindex = index[i];
}
}
//alert(maxindex);
return str.substring(maxindex+1);
}
function oc(){
alert(getString());
}
function dk(){
var str = getString();
if (event.ctrlKey && event.keyCode=='13') {
alert(str);
}
}
</script>
</head><body>
<textarea rows="50" cols="50" id="textarea" onclick="oc();" onkeydown="dk();" >
public class A{
private String name = 'asdf';
}
</textarea>
光标位置:
<input type="text" value="0" id="pnum" size="8">
</body>
</html>
请运行下面的代码:
我为textarea写了两和事件,一个是onclick事件,当你点击textarea的时候会alert一个string出来。第二个事件是onkeydown,和onclick事件调的同一个方法,但是就是出不来string,有谁写过关于teatarea的得到光标位置的代码。帮我看看!
源码如下,只要新建一个html文件,复制源码运行查看效果!
<html>
<head>
<title>textarea.jsp</title>
<script type="text/javascript">
function tellPoint() {
var rng = event.srcElement.createTextRange();
rng.moveToPoint(event.x, event.y);
rng.moveStart("character", -event.srcElement.value.length);
return rng.text.length;
}
function getString(){
var poin=tellPoint();
var str = textarea.value.substring(0,poin);
var indexstr = new Array();
indexstr[0]=' ';
indexstr[1]='.';
indexstr[2]='{';
indexstr[3]='}';
indexstr[4]='(';
indexstr[5]=')';
indexstr[6]=';';
indexstr[7]='&&';
indexstr[8]='&';
indexstr[9]='=';
indexstr[10]='!';
indexstr[11]='||';
indexstr[12]='|';
indexstr[13]='>';
indexstr[14]='<';
indexstr[15]='+';
indexstr[16]='-';
indexstr[17]='*';
indexstr[18]='/';
indexstr[19]='%';
indexstr[20]='^';
indexstr[21]='?';
indexstr[22]=',';
var index = new Array();
maxindex = -1;
for(var i = 0 ; i<indexstr.length;i++){
index[i] = str.lastIndexOf(indexstr[i]);
if(index[i]>maxindex){
maxindex = index[i];
}
}
//alert(maxindex);
return str.substring(maxindex+1);
}
function oc(){
alert(getString());
}
function dk(){
var str = getString();
if (event.ctrlKey && event.keyCode=='13') {
alert(str);
}
}
</script>
</head><body>
<textarea rows="50" cols="50" id="textarea" onclick="oc();" onkeydown="dk();" >
public class A{
private String name = 'asdf';
}
</textarea>
光标位置:
<input type="text" value="0" id="pnum" size="8">
</body>
</html>
alert(getString());
}
function dk(){
var str = getString();
if (event.ctrlKey && event.keyCode=='13') {
alert(str);
}
}这两个方法中。oc是给onclick调用的。
dk是给onkeydown调用的;
都是调用的getString()的方法;
上面有关getString的业务逻辑可以不去细看,我想做的是一个IDE关键字提示的功能;你可能先用鼠标点击一个关键字,如,你点在public 的b后面,那么他会把pub提示出来;
如果你用方向键移动到public的b后面,用快捷键Ctrl+Enter,却什么都出来不!我的本意是想用Ctrl+Enter快捷键代替鼠标点击的功能!
if (event.ctrlKey && event.keyCode=='13')
alert(getString());
}
function dk(){
var str = getString();
if (event.ctrlKey && event.keyCode==13) {
alert(str);
}
}
event.keyCode 不是字符串是码
anthor:doublej
得到文本域的操作实利;
*/
function TextareaClass(obj) {
this.obj = obj;
//java中的边界符
this.indexstr = new Array();
//java中的关键字
this.keylist = new Array();
//光标的X
this.x = 0;
//光标的Y
this.y = 0;
//文本内的光标位置[用户关键字结束位置]
this.len = -1;
//用户关键字开始位置;
this.maxindex = -1;
this._init(obj);
}
/**
初始化
*/
TextareaClass.prototype._init = function (obj) {
this.indexstr[0] = " ";
this.indexstr[1] = ".";
this.indexstr[2] = "{";
this.indexstr[3] = "}";
this.indexstr[4] = "(";
this.indexstr[5] = ")";
this.indexstr[6] = ";";
this.indexstr[7] = "&&";
this.indexstr[8] = "&";
this.indexstr[9] = "=";
this.indexstr[10] = "!";
this.indexstr[11] = "||";
this.indexstr[12] = "|";
this.indexstr[13] = ">";
this.indexstr[14] = "<";
this.indexstr[15] = "+";
this.indexstr[16] = "-";
this.indexstr[17] = "*";
this.indexstr[18] = "/";
this.indexstr[19] = "%";
this.indexstr[20] = "^";
this.indexstr[21] = "?";
this.indexstr[22] = ",";
this.keylist[0] = "public";
this.keylist[1] = "class";
this.keylist[2] = "private";
this.keylist[3] = "this";
this.keylist[4] = "super";
this.keylist[5] = "extend";
this.keylist[6] = "inertface";
this.keylist[7] = "String";
this.keylist[8] = "int";
this.keylist[9] = "float";
this.keylist[10] = "double";
this.keylist[11] = "byte";
this.keylist[12] = "char";
this.keylist[13] = "if";
this.keylist[14] = "while";
this.keylist[15] = "do";
this.keylist[16] = "return";
this.keylist[17] = "break";
this.keylist[18] = "try";
this.keylist[19] = "catch";
this.keylist[20] = "abstract";
this.keylist[21] = "case";
this.keylist[22] = "continue";
this.keylist[23] = "else";
this.keylist[24] = "final";
this.keylist[25] = "finally";
this.keylist[26] = "implements";
this.keylist[27] = "import";
this.keylist[28] = "instanceof";
this.keylist[29] = "long";
this.keylist[30] = "protected";
this.keylist[31] = "short";
this.keylist[32] = "static";
this.keylist[33] = "throw";
this.keylist[34] = "throws";
this.keylist[35] = "transient";
this.keylist[36] = "void";
this.keylist[37] = "enum";
this.len = this._getpoint(obj);
};
/**
得到当前光标的与文本的位置
*/
TextareaClass.prototype._getpoint = function (obj) {
var workRange = document.selection.createRange();
obj.select();
var allRange = document.selection.createRange();
workRange.setEndPoint("StartToStart", allRange);
var len = workRange.text.length;
workRange.collapse(false);
workRange.select();
return len;
};
/**
按下键盘事件
*/
TextareaClass.prototype.onkeydown = function () {
//Ctrl+Enter事件
if (event.ctrlKey == true && event.keyCode == 17) {
//移除
if (document.all.mydiv != undefined) {
document.all.mydiv.removeNode(true);
}
//得到用户当前关键字
var key = this._getkey();
//通过用户当前关键字得到关键字集合
var list = this._getkeys(key);
if (list.length > 0) {
var mydiv = document.createElement("div");
mydiv.id = "mydiv";
mydiv.className = "box";
mydiv.style.position = "absolute";
mydiv.style.width = 100;
for (var i = 0; i < list.length; i++) {
var myspan = document.createElement("span");
myspan.className = "op";
myspan.style.cursor = "hand";
myspan.innerText = list[i];
mydiv.appendChild(myspan);
myspan.onclick = function () {
var startstr = document.getElementById("demo").value.substring(0, this.maxindex);
var endstr = document.getElementById("demo").value.substring(this.len);
document.getElementById("demo").value = startstr + list[i] + endstr;
//mydiv.style.position=
};
}
mydiv.style.left = event.x;
mydiv.style.top = event.y;
document.body.appendChild(mydiv);
}
}
};
/**
得到用户关键字
*/
TextareaClass.prototype._getkey = function () {
var context = this.obj.value;
var index = new Array();
for (var i = 0; i < this.indexstr.length; i++) {
index[i] = context.lastIndexOf(this.indexstr[i]);
if (index[i] > this.maxindex) {
this.maxindex = index[i];
}
}
return context.substring(this.maxindex + 1);
};
/**
得到返回的关键字集合
*/
TextareaClass.prototype._getkeys = function (key) {
var keys = new Array();
var k = 0;
for (var i = 0; i < this.keylist.length; i++) {
if (this.keylist[i].indexOf(key) == 0) {
keys[k] = this.keylist[i];
k++;
}
}
return keys;
};