Page 1 of 1

불여우insertBefore 의 동작

Posted: 2007 12 29 15:13 17
by blueruin

Code: Select all

<html>
    <head>
        <script>
            function CreateForm(nm,mt,at,tg){
                var f=document.createElement("form");
                f.name = nm;
                f.method = mt;
                f.action = at;
                f.target = tg;
                return f;
            } 

            function AddHidden(f,n,v) {
                var i=document.createElement("input");
                i.type = "hidden";
                i.name = n;
                i.value = v;
                f.insertBefore(i);

                return f;
            } 

            function Run(){
                var frm = CreateForm("form1","post","action.php","_blank");
                frm=AddHidden(frm,"m","mode1");
                document.insertBefore(frm);
                frm.submit();
            }
        </script>
    </head>
    <body>
        <input>
    </body>
</html>

form 을 만들어 submit 하는코드인데 익스에선 동작하는데 파폭에서 동작을 하지 않습니다.
콘솔에서 에러는 다음과 같이 출력됩니다.

uncaught exception: [Exception... "Not enough arguments" nsresult: "0x80570001 (NS_ERROR_XPC_NOT_ENOUGH_ARGS)" location: "JS frame :: c://test.html :: AddHidden :: line 18" data: no]
Line 0

검색해보니 insertBefore 가 파폭에서 동작안하니 appendChild 를 사용하라는 글이 있어 해보았지만 역시 안됩니다.
어떻게 해야할까요?

Posted: 2007 12 29 22:50 07
by peecky
insertBefore는 두 개의 파라메터가 필요합니다. 엘리먼트를 삽입할 위치를 지정할 때 사용하는것인데, 코드상 삽입 위치는 중요하지 않은것 같으니 appendChild를 사용해도 무방합니다.

appendChild를 쓸 경우

Code: Select all

document.appendChild(frm)
이 부분때문에 에러가 발생합니다. <form>객체를 document객체 하위로 바로 넣지말고, <body>객체 하위에 넣어보세요.