<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<head>
    <script type="text/javascript" src="prototype.js"></script>
    <script type="text/javascript">
   
    var DPSelectbox = Class.create();
    var DPArr = []; // Common
   
    // Common Func
    function getKey(key) {
        if(DPArr.length > 0) {
            for(var i = 0; i < DPArr.length; i++) {
                if(DPArr[i].key == key) {
                    return DPArr[i];
                }
            }
        }
        return null;
    }
    
    DPSelectbox = {
    maxNode: 100,
        create: function(div, callback, data) {
            this.key = div;
            DPArr.push(this);
            var mobj = getKey(div);
            mobj.div = div;
            mobj.turnkey = callback;
            mobj.data = data;
            mobj.depth = 0;
            var code = mobj.data[1];
            mobj.makeLayer(div, code);

    },
        makeLayer : function(div, code) { // public
            var mobj = getKey(div);
            if (!mobj.isLast(div, code)) {
                var layer = document.createElement("DIV");
                mobj.depth++;
                layer.setAttribute("id", "DP_div_" + mobj.div + "_" + mobj.depth);
                layer.appendChild(mobj.makeSelect(div, code));
                $(mobj.div).appendChild(layer);
            }else {
                eval("mobj.turnkey($('DP_select_' + mobj.div + mobj.depth));");
            }
        },
        makeSelect : function(div, code) { // private
            var mobj = getKey(this.div);
            var obj = document.createElement("select");
      var selName = "DP_select_" + mobj.div + "_" + mobj.depth;
            obj.setAttribute("id", selName);

    var opt = document.createElement("option");
    var txt = document.createTextNode("-All-");
    opt.setAttribute("value", "");
    opt.appendChild(txt);
    obj.appendChild(opt);

    for(var i = 0; i < mobj.data.length; i+=3) {
     if(code == mobj.data[i+1]) {
      var opt = document.createElement("option");
      var txt = document.createTextNode(mobj.data[i+2]);
      opt.setAttribute("value", mobj.data[i]);
      opt.appendChild(txt);
      obj.appendChild(opt);
     }
    }

    $(mobj.div).appendChild(obj);
            $(selName).observe("change", function(event) {
               mobj.childNodeExist(div, code, $(selName).id);
               mobj.makeLayer(div, this.value); 
            } );
            return obj;
        },
        isLast : function(div, code) {
            var mobj = getKey(div);
            var cnt = 0;
            for(var i = 0; i < mobj.data.length; i+=3) {
                if(code == mobj.data[i+1]) cnt++;
            }
            return (cnt == 0 ? true : false);
        },
        childNodeExist : function(div, code, tSel) {
            var mobj = getKey(div);
    var pos = tSel.lastIndexOf("_") + 1;
    var noStr = tSel.substring(pos + div.length);
    var no = parseInt(noStr) + 1;
    var flag = true;

    for(var i = no; i < DPSelectbox.maxNode; i++) {
     if($("DP_div_" + div + "" + i) != null) {
      $(mobj.div).removeChild($("DP_div_" + div + "_" + i));
      flag = false;
     }
    }
            
    if(!flag) {
     mobj.depth = no-1;
    }
        }
    };
    
    function init() {
        DPSelectbox.create("sel",
                   function(obj) {
                       $("code").value = obj.value;
                   },
                   ["1", "0", "프로그래밍",
       "2", "1", "윈도우",
       "3", "1", "리눅스",
       "4", "1", "모바일",
       "5", "2", "C/C++",
       "6", "2", "VB",
       "7", "2", "C#",
       "8", "3", "GCC/GPP",
       "9", "3", "Shell",
       "10", "9", "Perl",
       "11", "9", "Python",
       "12", "9", "Ruby"]
        );


/*
     DPSelectbox.create("sel1",
                   function(obj) {
                       $("code1").value = obj.value;
                   },
                   [
       "1", "0", "프로그래밍",
       "2", "1", "윈도우",
       "3", "1", "리눅스",
       "4", "1", "모바일",
       "5", "2", "C/C++",
       "6", "2", "VB",
       "7", "2", "C#",
       "8", "3", "GCC/GPP",
       "9", "3", "Shell",
       "10", "9", "Perl",
       "11", "9", "Python",
       "12", "9", "Ruby"
       ]
        );
*/
    }
   
    Event.observe(window, "load", function() { init(); } )
    </script>

</head>

<div id="sel"></div>
<div id="sel1"></div>
<input type="text" id="code" name="code" value="">
<input type="text" id="code" name="code1" value="">


 
<html>
<head>
<script type="text/javascript">
 function printStackTrace() {   
   var callstack = [];   
   var isCallstackPopulated = false;   
   try {   
     i.dont.exist+=0; //does not exist - that's the point   
   } catch(e) {   
     if (e.stack) { //Firefox   
     var lines = e.stack.split("\n");   
     for (var i = 0, len = lines.length; i < len; i++) {   
       if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {   
         callstack.push(lines[i]);   
       }   
     }   
     //Remove call to printStackTrace()   
     callstack.shift();   
     isCallstackPopulated = true;   
     }   
     else if (window.opera && e.message) { //Opera   
     var lines = e.message.split("\n");   
     for (var i = 0, len = lines.length; i < len; i++) {   
       if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {   
         var entry = lines[i];   
         //Append next line also since it has the file info   
         if (lines[i+1]) {   
         entry += " at " + lines[i+1];   
         i++;   
         }   
         callstack.push(entry);   
       }   
     }   
     //Remove call to printStackTrace()   
     callstack.shift();   
     isCallstackPopulated = true;   
     }   
   }   
   if (!isCallstackPopulated) { //IE and Safari   
     var currentFunction = arguments.callee.caller;   
     while (currentFunction) {   
     var fn = currentFunction.toString();   
     //If we can't get the function name set to "anonymous"   
     var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf("(")) || "anonymous";   
     callstack.push(fname);   
     currentFunction = currentFunction.caller;   
     }   
   }   
   output(callstack);   
 }   
   
 function output(arr) {   
   //Optput however you want   
   alert(arr.join("\n\n"));   
 }  
</script>
</head>

<script type="text/javascript">
 function foo() {   
   var blah;   
   bar("blah");   
 }
   
 function bar(blah) {   
   var stuff;   
   thing();   
 }   
   
 function thing() {   
   if (true) { //your error condition here   
     printStackTrace();   
   }   
 }   
   
 foo();  
</script>
</body>
</html>

<html>
<head>
<script type="text/javascript">

// 문제 모듈
function Tester()
{
    this.cnt = 0;
    this.thisObj = null;
    
    this.setTester = function(obj) {
        this.test = obj;
    }

    this.display = function(callBack) {
        this.thisObj = eval("this.test.q" + this.cnt);
        if(this.thisObj != undefined)
            callBack(this.cnt, this.thisObj);
    }

    this.answer = function(num) {
        if(this.thisObj != undefined)
        {
            if(this.thisObj[0] == num)
                this.cnt++; // 정답
            else
                alert(this.test.msgFalse);    
        }
    }

    this.isNext = function() {
        return (eval("this.test.q" + this.cnt) == undefined ? false : true);
    }
}

// 문제
var test1 = {
    msgFalse : "정답이 아닙니다",
    q0            : [1,
                    "정답을 선택하세요",
                    "TRUE",
                    "FALSE"
                ],
    q1            : [2,
                    "구구단을 푸세요\n누구세요는?",
                    "1x2",
                    "3",
                    "9*9"
                ]
}

// 사용
var a = new Tester();

function SubFunc(num, obj)
{
    var ele = document.getElementById("div1");
    var str = "Q" + (num+1) + ". " + obj[1] + "<BR>";
    for(var i = 2; i < obj.length; i++)
    {
        str += "&nbsp;&nbsp;&nbsp;<input type='radio' name='awr' value='" + (i-1) +"' onClick='UseFunc(this.value);'>" + obj[i] + "<BR>";
    }

    ele.innerHTML = str;
}

function UseFunc(num)
{
    var obj = document.getElementById("div2");
    a.answer(num);
    if(a.isNext()) {
        obj.innerHTML = "<b>Next &gt;&gt;&gt; </b>";
        a.display(SubFunc);
    }else {
        obj.innerHTML = "<b><a href=\"javascript:alert('응모');\">응모하기 (GO)</a></b>";
    }
}

function init() {
    a.setTester(test1);
    a.display(SubFunc);
    
    /*
    while(a.isNext()) {
        a.display();
        a.answer(1);
    }
    */
}

window.onload = init;
</script>
</head>
<body>
<div id="div1"></div>
&nbsp;<br>
<div id="div2" style="position:absolute;top=120px;left=150px;"><b>Next &gt;&gt;&gt;</b></div>
</body>
</html>

-----------------------------------------------------------

위의 '문제' 부분에
q0 ~ q? 를 계속 추가해 주면 다른 스크립트 수정없이 재 사용 가능하다.

var PTN = /(?:\s*||)\s*([\/\s\.\-\?\wㄱ-힝]*)\s*(?:<\/font><\/a>|<\/font>|<\/a>)/ig; PTN.lastIndex = 0; while( (ar = PTN.exec(tmp)) != null) ; pre>

'코드' 카테고리의 다른 글

TShellWindows  (0) 2008.07.14
[BCB] HtmlElements - TTreeView  (0) 2008.07.10
윈도 탐색기로 부터 정보 빼오기 VC++  (0) 2008.07.02
input-tag Validate  (0) 2008.06.28
한글체크 JS  (0) 2008.06.24
var frmObj = chkForm;
  var PTN = [2, /[0-9]/, '숫자', 5, /[ㄱ-힝]/, '한글'];
  var cnt = 0;
  var pos;
  var flag = true;
 
  for(var i = 0; i < PTN.length; i+=3) {
   for(var j = 0; j < PTN[i]; ++j) {
    pos = eval("frmObj.pn" + ++cnt);
    if(!PTN[i+1].test(pos.value)) {
     alert(PTN[i+2] + "만 가능합니다.");
     pos.value = "";
     pos.focus();
     flag = false;
     break;
    }
   }
   if(!flag) break;
  }
 
  if(flag) {
     // 처리...
  }

'코드' 카테고리의 다른 글

TShellWindows  (0) 2008.07.14
[BCB] HtmlElements - TTreeView  (0) 2008.07.10
RegExp - JS  (0) 2008.07.02
윈도 탐색기로 부터 정보 빼오기 VC++  (0) 2008.07.02
한글체크 JS  (0) 2008.06.24
<html>
<head>
<script type="text/javascript">
 function doCheck() {
  var obj = document.getElementById("disp");
  var f = frm.memo;
  var cnt = getLength(f.value);
 
  if(cnt > 10) {
   alert("입력 내용이 초과했습니다.");
   cnt = f.value.length - 1;
   f.value = f.value.substr(0, cnt);
  }
 
  obj.innerText = cnt + " / " +  f.value;
 }
 
 function getLength(val) {
  var a = escape(val);
  var dim;
  var cnt = 0;
 
  if(a != null) {
   dim = a.match(/\%u\w{4}|\%\w{2}|./g);
   if(dim != null) {
    for(var i = 0; i < dim.length; i++) {
     if(dim[i].indexOf("%u") != -1) cnt++;
     cnt++;
    }
   }
  }
  return cnt;
 }
</script>
</head>
<body>
<form name="frm">
<textarea name="memo" cols='60' rows='10' onkeypress="doCheck();" onkeydown="doCheck();"></textarea>
</form>
<div id="disp">0</div>
</body>
</html>

'코드' 카테고리의 다른 글

TShellWindows  (0) 2008.07.14
[BCB] HtmlElements - TTreeView  (0) 2008.07.10
RegExp - JS  (0) 2008.07.02
윈도 탐색기로 부터 정보 빼오기 VC++  (0) 2008.07.02
input-tag Validate  (0) 2008.06.28

+ Recent posts