js 文本框根据开始结束符号控制输入内容(IE)

 1 //模板控制
 2     var preMark = "[";
 3     var latterMark = "]";
 4     $("#new_desc").on("keydown", function (event) {
 5                 var valtxt = $(this).val();
 6                 if (valtxt.indexOf(preMark) > -1 && valtxt.indexOf(latterMark) > -1) {
 7                     var p = posCursor(this.id);
 8                     var perindex = valtxt.lastIndexOf(preMark, p.start);
 9                     var index = valtxt.indexOf(latterMark, p.start);
10                     if(!(valtxt.substring(p.start, p.end).indexOf(latterMark) == -1
11                         && valtxt.substring(p.start, p.end).indexOf(preMark) == -1)){
12                             return false;
13                         }
14                     else if (event.keyCode == '8') {
15                         //删除键只能删除括号里面
16                         if (valtxt.substring(perindex + 1, index).length > 0 && valtxt.substring(perindex + 1, index).indexOf(latterMark) == -1 && valtxt.substring(perindex + 1, index).indexOf(preMark) == -1 && valtxt.substring(perindex + 1, index).indexOf(latterMark) <= valtxt.substring(perindex + 1, index).indexOf(preMark) && p.end > perindex + 1) {
17                             return true;
18                         } else {
19                             return false;
20                         }
21                     }
22                     //禁用删除、全选、[]
23                     else if (event.keyCode == "46" || event.shiftKey!=true && (event.keyCode == "221" || event.keyCode == "219" )|| (event.ctrlKey) && (event.keyCode == 65)) {
24                         return false;
25                     }
26                     //括号外禁用所有操作
27                     else if (event.keyCode != "38" && event.keyCode != "40" && perindex != -1 && index != -1 && perindex < index && perindex + 1 <= p.start && index >= p.start && valtxt.substring(perindex + 1, index).indexOf(latterMark) == -1 && valtxt.substring(perindex + 1, index).indexOf(preMark) == -1) {
28                         if (perindex + 1 == p.start && event.keyCode == 37) {
29                             moveCursor(this.id, perindex + 1, perindex + 1);
30                         } else if (index == p.end && event.keyCode == 39) {
31                             moveCursor(this.id, index, index);
32                         } else {
33                             return true; 
34                         }
35                     } else {
36                         if (index == p.end && event.keyCode == "37" || perindex + 1 == p.start && event.keyCode == "39") {
37                             return true;
38                         }
39                         return false;
40                     }
41                 } else { 
42                     return false; 
43                 }
44             })
45             //禁用拖拽
46             .on("drop", function () {
47                 return false;
48             })
49             .select(function (event) {
50                 var valtxt = $(this).val();
51                 if (valtxt.indexOf(preMark) > -1 && valtxt.indexOf(latterMark) > -1) {
52                     var p = posCursor(this.id); //括号范围之内不做任何操作
53                     var perindex = valtxt.lastIndexOf(preMark, p.start);
54                     var index = valtxt.indexOf(latterMark, p.start);
55                     if (valtxt.substring(perindex + 1, index).indexOf(latterMark) == -1
56                         && valtxt.substring(perindex + 1, index).indexOf(preMark) == -1
57                         && valtxt.substring(perindex + 1, index).indexOf(latterMark) <= valtxt.substring(perindex + 1, index).indexOf(preMark)
58                         && p.end >= perindex + 1
59                         && valtxt.substring(p.start, p.end).indexOf(latterMark) == -1
60                         && valtxt.substring(p.start, p.end).indexOf(preMark) == -1
61                         ) {
62 
63                     } else {
64                         window.getSelection().removeAllRanges();
65                     }
66                 } else { 
67                     return false;
68                 }
69             })
70             //移入自动定位到指定中括号内
71             .on("mouseup", function () {
72                 var valtxt = $(this).val();
73                 if (valtxt.indexOf(preMark) > -1 && valtxt.indexOf(latterMark) > -1) {
74                     var p = posCursor(this.id);
75                     //括号范围之内不做任何操作
76                     if (valtxt.lastIndexOf(preMark, p.start) < p.start && p.start < valtxt.indexOf(latterMark, p.start) + 1 && valtxt.substring(valtxt.lastIndexOf(preMark, p.start) + 1, valtxt.indexOf(latterMark, p.end)).indexOf(latterMark) == -1 && valtxt.substring(valtxt.lastIndexOf(preMark, p.start) + 1, valtxt.indexOf(latterMark, p.end)).indexOf(preMark) == -1) {
77 
78                     } else {
79                         //定位并选中括号之间
80                         var startindex = valtxt.indexOf(preMark, p.start);
81                         if (startindex > -1) {
82                             var endindex = valtxt.indexOf(latterMark, p.start);
83                             var lstartindex = valtxt.lastIndexOf(preMark, p.start);
84                             var lendindex = valtxt.lastIndexOf(latterMark, p.start);
85                             if ((lstartindex > -1 && Math.abs(p.start - lendindex) < Math.abs(p.start - startindex)) && valtxt.substring(lendindex, p.start - 2).indexOf("
") == -1) {
86                                 startindex = lstartindex;
87                                 endindex = lendindex;
88                             }
89                         } else {
90                             startindex = valtxt.lastIndexOf(preMark, p.start);
91                             var endindex = valtxt.lastIndexOf(latterMark, p.start);
92                         }
93                         //
94                         var ncnt = 0;
95                         //执行光标定位
96                         moveCursor(this.id, startindex + 1 + ncnt, endindex + ncnt);
97                     }
98                 } else { $(this).blur(); }
99             });
原文地址:https://www.cnblogs.com/zengtianli/p/14714861.html