<textarea style="width: 800px;height: 500px;" id="code" ></textarea>
<br />
<input type="button" id="run" value="运行" />
<script>
(function (){
var TabEvent = window.TabEvent = {
bindElement: function (target) {
target.onkeydown = function (event){
var tabString = "/t";
//IE support
if(9 === (window.event || event).keyCode){
if (document.selection) {
target.focus();
sel = document.selection.createRange();
sel.text = tabString;
sel.select();
}
//MOZILLA/NETSCAPE support
else if (target.selectionStart || target.selectionStart == '0') {
var startPos = target.selectionStart;
var endPos = target.selectionEnd;
// save scrollTop before insert
var restoreTop = target.scrollTop;
target.value = target.value.substring(0, startPos) + tabString + target.value.substring(endPos, target.value.length);
if (restoreTop > 0) {
// restore previous scrollTop
target.scrollTop = restoreTop;
}
target.focus();
target.selectionStart = startPos + tabString.length;
target.selectionEnd = startPos + tabString.length;
} else {
target.value += tabString;
target.focus();
}
return false;
}
}
},
bindOne: function (target){
var targetNode = target;
if(target.substring){
targetNode = this.get(target);
}
if(targetNode.nodeName && targetNode.nodeName.toUpperCase && targetNode.nodeName.toUpperCase() === "TEXTAREA"){
this.bindElement(targetNode);
} else {
throw new Error("the target is not a textarea node or id。");
}
},
binInputTabs: function (target){
if(target.length && target.push){
for(var i=0;i<target.length;i++){
this.bindOne(target[i]);
}
} else {
this.bindOne(target);
}
},
get: function (id){
return document.getElementById(id)
}
};
})();
function get(id) {
return document.getElementById(id);
}
TabEvent.binInputTabs("code");
get("run").onclick = function(){
eval(get("code").value);
}
</script>
IE测试通过:
FireFox测试通过: