기존 운영중인 사이트에 오래전...(2016년도쯤????)에 chrome notification 을 적용해두었습니다.

이게 뭐냐하면 notification 명령어를 날리면 윈도우 창 우측 하단에

요런식으로 알림창을 띄워주는 겁니다.

저기서 클릭하면 클릭이벤트에 대해서도 지정할수 있고요.

사이트내에 웹소켓을 적용하여 새로운 글이나 쪽지 알림등이 올 경우 브라우저가 열려있으면 저렇게 알림창을 보내는 역할이지요.

그런데, 잘 사용하다가 어느날 안되는겁니다. (오잉? 왜 안되지...)

귀찮아서 내비두고 있다가 몇개월이나 지나서야 이제서야 수정작업에 들어갔습니다.

크롬 콘솔에서 Notification.permission 이라고 입력해도 denied 나와요 --;

분명 크롬 설정창에는 허용이라고 되어있는데, 도대체 이유가 뭐지..하고 검색을 해보니..

아니나 다를까. 이 ssl (https) 좋아하는 구글(보안덕후)이 https 가 붙지 않은 사이트에 대해서는 notification api 를 remove 하였습니다. 헐!!!!

https://www.chromestatus.com/feature/5759967025954816

그래서 사이트에 인증서 붙이고 HTTPS 로 전환하니 정상적으로 작동하네요...

'Computer > JavaScript' 카테고리의 다른 글

chrome notification https 미지원  (0) 2018.02.14
화면상의 위치 가져오기  (0) 2012.08.10
폼 검사기  (0) 2012.08.10
키코드 표  (0) 2012.08.10
쿠키  (0) 2012.08.10
자동완성  (0) 2012.08.10

function getBounds(tag)
{
    var ret = new Object();
    if(document.all) {
        var rect = tag.getBoundingClientRect();
        ret.left = rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft);
        ret.top = rect.top + (document.documentElement.scrollTop || document.body.scrollTop);
        ret.width = rect.right - rect.left;
        ret.height = rect.bottom - rect.top;
    } else {
        var box = document.getBoxObjectFor(tag);
        ret.left = box.x;
        ret.top = box.y;
        ret.width = box.width;
        ret.height = box.height;
    }
    return ret;
}


var box = getBounds(document.getElementById('youranytag'));
box.left
box.top
box.width
box.height

 

저작권자 - PHPSCHOOL 송효진

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

chrome notification https 미지원  (0) 2018.02.14
화면상의 위치 가져오기  (0) 2012.08.10
폼 검사기  (0) 2012.08.10
키코드 표  (0) 2012.08.10
쿠키  (0) 2012.08.10
자동완성  (0) 2012.08.10

 

 

개발용 버전

서비스용 버전

 


항목이 입력되었는지 검사

사용자가 해당 항목에 값을 입력하였는지 아닌지를 검사한다. 검사 항목에 required 속성을 부여하면 사용자가 해당 항목을 입력하지 않았을 때 에러를 반환한다. 다음 예제를 실행해보자.

전화번호

아래는 phone이라는 항목에 required 속성을 부여하는 부분이다. 여기서 phone이라는 문자열은 조건을 부여할 항목을 가리키는데 이는 폼이 지정된 경우에는 해당 항목의 name 속성을 가리키는 문자열일 수 있고 해당 항목의 ID 속성을 가리키는 문자열 혹은 DOM model을 지정할 수 있다.

v.add("phone", {
    required: true
});

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm(form) {
    var v = new MiyaValidator(form);
    v.add("phone", {
        required: true
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm(this)">
    <fieldset>
        <label>전화번호 <input type="text" name="phone" size="12" /></label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

여러 항목 중 지정 항목 이상이 입력되었는지 검사

사이트를 만들 때 전화번호와 핸드폰번호 중 한가지는 반드시 입력받게 하는 경우가 있다. 그 외에도 여러 항목 중 몇 가지 이상, 혹은 몇 가지 이하로 입력받아야 하는 경우가 생긴다. 다음의 예제를 실행해보자. 전화번호와 핸드폰번호 중 한가지는 반드시 입력받는 예제이다.

전화번호
핸드폰번호

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm7(form) {
    var v = new MiyaValidator(form);
    var cond1 = new MiyaCondition("phone", {
        required: true,
        option: "phone"
    }, null, form);
    var cond2 = new MiyaCondition("cell", {
        required: true,
        option: "handphone"
    }, null, form);
    v.addGroup([cond1, cond2], {
        requiremin: 1
    });
    var result = v.validate();
    if (!result) {
        var msg = v.getErrorMessage();
        alert(msg);
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm7(this);">
    <fieldset>
        <label>전화번호 <input type="text" name="phone"
            size="12" /></label><br />
        <label>핸드폰번호 <input type="text" name="cell"
            size="12" /></label><br />
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

두 항목의 입력값이 동일한지 검사

비밀번호를 입력받을 경우 입력되는 값이 사용자에게 표시되지 않기 때문에 오타 방지를 위해 같은 값을 중복하여 입력받는 경우가 많다. 아래의 예제는 그러한 경우 두 항목의 입력값이 같은지를 검사할 수 있게 해준다.

비밀번호 비밀번호 확인

아래는 password이라는 항목에 입력값이 동일한지 검사하는 match 속성을 부여하는 부분이다. match 속성에 입력값이 동일한지 검사할 또 다른 항목을 정의한다.

v.add("password", {
        required: true,
        match: "password2"
    });

match 속성은 두 항목이 전부 비어있을 경우 에러를 반환하지 않기 때문에 필수값 지정을 위해서는 required 속성과 함께 사용하여야 한다.

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm2(form) {
    var v = new MiyaValidator(form);
    v.add("password", {
        required: true,
        match: "password2"
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm2(this)">
    <fieldset>
        <label>비밀번호 <input type="password" name="password" size="12" /></label>
        <label>비밀번호 확인 <input type="password" name="password2" size="12" /></label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

입력된 내용의 Byte를 제한

회원가입 시 입력받는 아이디는 보통 길이제한을 둔다. 또 너무 짧은 아이디는 만들지 못하게 하기도 한다. 그런 경우 몇 글자 이상 몇 글자 이하로 입력받게 되는데 몇 글자 이하와 같은 경우에는 HTML의 maxlength 속성을 사용할 수 있는데 한글과 같은 2 byte 문자가 허용되는 경우에는 그 속성이 한계가 있다.

아래의 예제는 아이디를 4~12 byte로 입력받는 예제이다.

아이디

minbyte와 maxbyte 속성을 사용하면 입력값의 최소 byte와 최대 byte를 지정하여 너무 짧거나 너무 긴값을 입력받았을 때 사용자에게 알려줄 수 있다.

아래는 loginid 항목을 4~12 byte 사이의 필수항목으로 설정하는 예제이다.

v.add("loginid", {
    required: true,
    minbyte: 4,
    maxbyte: 12
});

입력값이 비어있을 경우에는 minbyte와 maxbyte 속성이 무시되기 때문에 반드시 입력받아야 하는 경우 required 속성과 같이 사용하면 된다.

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm3(form) {
    var v = new MiyaValidator(form);
    v.add("password", {
        required: true,
        minbyte: 4,
        maxbyte: 12
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm3(this)">
    <fieldset>
        <label>아이디 <input type="text" name="loginid" size="12" /></label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

체크박스 항목의 선택된 항목수를 검사

체크박스의 선택된 항목수를 검사한다. 항목에 mincheck, maxcheck 속성을 부여하여 검사를 수행한다. 아래의 예제는 관심분야를 2개 이상 4개 이하로 입력받는 예제이다.

관심분야 HTML CSS JavaScript DOM PHP Ruby Java C

아래는 favorites[] 항목을 2~4 개 사이로 선택받는 예제이다.

v.add("favorites[]", {
    required: true,
    mincheck: 2,
    maxcheck: 4
});

하나도 선택받지 않았을 경우 mincheck와 maxcheck 속성이 무시되기 때문에 반드시 선택받아야 하는 경우 required 속성과 같이 사용하면 된다.

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm11(form) {
    var v = new MiyaValidator(form);
    v.add("favorites[]", {
        required: true,
        mincheck: 2,
        maxcheck: 4
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm11(this)">
    <fieldset>
        관심분야
        <label><input type="checkbox" name="favorites[]" value="HTML">HTML</label>
        <label><input type="checkbox" name="favorites[]" value="CSS">CSS</label>
        <label><input type="checkbox" name="favorites[]" value="JavaScript">JavaScript</label>
        <label><input type="checkbox" name="favorites[]" value="DOM">DOM</label>
        <label><input type="checkbox" name="favorites[]" value="PHP">PHP</label>
        <label><input type="checkbox" name="favorites[]" value="Ruby">Ruby</label>
        <label><input type="checkbox" name="favorites[]" value="Java">Java</label>
        <label><input type="checkbox" name="favorites[]" value="C">C</label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

다중 콤보박스(multiple 속성이 지정된 select 객체)의 선택된 항목수를 검사

다중 선택이 가능한 콤보박스의 선택된 항목수를 검사한다. 항목에 minselect, maxselect 속성을 부여하여 검사를 수행한다. 아래의 예제는 관심분야를 2개 이상 4개 이하로 입력받는 예제이다.

관심분야 HTML CSS JavaScript DOM PHP Ruby Java C

아래는 favorites 항목을 2~4 개 사이로 선택받는 예제이다.

v.add("favorites", {
    required: true,
    minselect: 2,
    maxselect: 4
});

하나도 선택받지 않았을 경우 minselect와 maxselect 속성이 무시되기 때문에 반드시 선택받아야 하는 경우 required 속성과 같이 사용하면 된다.

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm4(form) {
    var v = new MiyaValidator(form);
    v.add("favorites", {
        required: true,
        minselect: 2,
        maxselect: 4
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm4(this)">
    <fieldset>
        <label>관심분야
            <select name="favorites" multiple="multiple">
                <option>HTML</option>
                <option>CSS</option>
                <option>JavaScript</option>
                <option>DOM</option>
                <option>PHP</option>
                <option>Ruby</option>
                <option>Java</option>
                <option>C</option>
            </select>
        </label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

이메일 형식의 검사

이메일 형식과 같이 특정한 형식을 입력받는 경우가 있다. Miya Validator에서는 Miya Format 객체를 통해 이 형식을 검사한다. Miya Validator의 FORMAT_MAP 상수에 정의된 속성을 option 속성에 지정하여 검사한다. 다음은 이메일 형식의 검사 예제이다.

이메일

아래는 youremail이라는 항목에 option 속성을 부여하는 부분이다. email로 option 속성을 정의하면 Miya Validator는 FORMAT_MAP에서 email 선언을 찾아 그 선언이 지시하는 함수를 검사에 사용한다.

v.add("youremail", {
    option: "email"
});

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm5(form) {
    var v = new MiyaValidator(form);
    v.add("youremail", {
        option: "email"
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm5(this)">
    <fieldset>
        <label>이메일 <input type="text" name="youremail" size="50" /></label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

여러 항목으로 분리하여 입력받는 전화번호 형식의 검사

전화번호, 이메일 주소, 우편번호 등은 일정한 형식이 있어 특정문자로 연결된 분리된 텍스트 필드로 된 UI를 제공하기도 한다. 이처럼 전화번호를 입력받는 예제를 소개한다.

전화번호 - -

여기서 첫 번째 텍스트 필드만으로는 사용자가 제대로 된 전화번호를 입력했는지 체크할 수 없고, 세 개의 텍스트 필드를 일일이 검사하는 것은 너무 번거롭기도 하고 사용자에게 피드백을 제공하기도 적절치 못한 방법이다. Miya Validator에서는 span 속성과 glue 속성을 제공하여 이와 같은 검사를 수행하게 해준다. 다음의 코드를 보자.

v.add("phone", {
    option: "phone",
    span: 3,
    glue: "-"
});

여기서 3이라는 span 속성은 phone에 인접한 3개의 폼 컨트롤(phone 포함)의 값을 합쳐 검사하라는 지시이고, "-"라는 glue 속성은 3개의 폼 컨트롤의 값을 합칠 때 중간 중간에 "-" 문자를 넣으라는 지시이다.

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm6(form) {
    var v = new MiyaValidator(form);
    v.add("phone", {
        option: "phone",
        span: 3,
        glue: "-"
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm6(this)">
    <fieldset>
        <label>전화번호 <input type="text" name="phone" size="3" /></label>
        - <input type="text" name="phone2" size="4" />
        - <input type="text" name="phone3" size="4" />
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

주민등록번호, 숫자 등 다양한 입력 형식의 검사 예제들

option 속성을 통해 제공하는 다양한 입력 형식 검사의 예제들을 제공한다.

주민등록번호 -

외국인등록번호 -

생일

나이

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm12(form) {
    var v = new MiyaValidator(form);
    v.add("jumin", {
        option: "jumin",
        span: 2,
        glue: "-"
    });
    v.add("foreignerno", {
        option: "foreignerno",
        span: 2,
        glue: "-"
    });
    v.add("birthday", {
        option: "isdate"
    });
    v.add("age", {
        required: true,
        option: "number"
    });
    var result = v.validate();
    if (!result) {
        alert(v.getErrorMessage());
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm12(this)">
    <fieldset>
        <p>
            <label>주민등록번호 <input type="text" name="jumin" size="6" maxlength="6" title="주민등록번호 앞자리" /></label>
            - <input type="text" name="jumin2" size="7" maxlength="7" title="주민등록번호 뒷자리" />
        </p>
        <p>
            <label>외국인등록번호 <input type="text" name="foreignerno" size="6" maxlength="6" title="외국인등록번호 앞자리" /></label>
            - <input type="text" name="foreignerno2" size="7" maxlength="7" title="외국인등록번호 뒷자리" />
        </p>
        <p>
            <label>생일 <input type="text" name="birthday" size="12" maxlength="11" value="1990-01-01" /></label>
        </p>
        <p>
            <label>나이 <input type="text" name="age" size="3" maxlength="3" /></label>
        </p>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

에러 메시지를 동적으로 선언하기

때로는 자동으로 생성되는 에러 메시지가 어색하거나 사용자에게 다른 피드백을 제공해야 할 경우가 생긴다. 이 때는 어떻게 할까? 항목이 입력되었는지 검사 예제의 에러 메시지를 바꿔보자. 다음 예제를 실행해보자.

전화번호

에러 메시지를 바꾸어 보았다. 기존 검사 조건에 message 속성을 추가하면 원하는 에러 메시지를 표시할 수 있다. 그런데, 예제를 실행시켜보면 `전화번호`라는 단어가 에러 메시지에도 있고 Miya Validator가 기본적으로 제공하는 label(`[전화번호]`)로도 존재하니 약간 어색한 감이 있다. 그럴 때 label 형태는 제거해야 하는 데 어떻게 할까? 다음 예제를 실행해보자.

전화번호

폼 유효성 검사 후 오류 시 에러 메시지를 가져오는 getErrorMessage 함수에 `{message}`라는 문자열을 넣어주었다. Miya Validator에서는 에러 메시지의 형식을 `[{label}] {message}` 형태로 제공하는 데 이는 폼 컨트롤의 label과 오류가 난 조건의 메시지로 치환되는데, `{message}`라는 문자열이 이 형태를 단순히 메시지로만 치환되게 하여주는 것이다. 원한다면 label을 다른 형태로 표시해주는 등 응용도 가능할 것이다.

아래는 두 번째 예제의 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
function checkForm13(form) {
    var v = new MiyaValidator(form);
    v.add("phone", {
        required: true,
        message: "전화번호를 입력하지 않으시면 제가 전화를 할 수가 없어요. ㅠ.ㅠ"
    });
    var result = v.validate();
    if (!result) {
        var msg = v.getErrorMessage("{message}");
        alert(msg);
        v.getErrorElement().focus();
    } else {
        alert("감사합니다!");
    };
    return false;
};
// ]]>
</script>
<form action="somewhere" onsubmit="return checkForm13(this);">
    <fieldset>
        <label>전화번호 <input type="text" name="phone" size="12" /></label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

△ Contents

실시간 검사 (miya_validator_realtime 필요)

Miya Validator의 확장 MiyaValidatorRealtime을 소개한다. Miya Validator는 사용자가 폼 값들을 전부 입력하고 제출하기 버튼을 눌렀을 때 에러 메시지를 표시하는 데, MiyaValidatorRealtime를 사용하면 사용자가 각 폼 컨트롤을 지나칠 때마다 유효성 검사를 통해 즉각적으로 사용자에게 피드백을 전달한다. 간편한 유효성 검사를 넘어 사용자의 편의를 증대시키는 MiyaValidatorRealtime를 추가해보자!

MiyaValidatorRealtimeLiveValidation에서 모티브를 얻어 Miya Validator의 강력한 유효성 검사 기능을 실시간으로 제공하기 위하여 제작하였습니다.

전화번호 - -
주소

아래는 예제 전체 코드이다.

<script type="text/javascript">
// <![CDATA[
addEvent(window, "load", function() {
    var f = document.forms["phoneform"];
    var v = new MiyaValidator(f);
    v.add("phone", {
        required: true,
        span: 3,
        glue: "-",
        option: "phone"
    });
    v.add("address", {
        required: true
    });
    v.enableRealtimeValidation();
    f.onsubmit = function() {
        var result = v.validate();
        if (!result) {
            alert(v.getErrorMessage());
            v.getErrorElement().focus();
        } else {
            alert("감사합니다!");
        };
        return false;
    };
});
// ]]>
</script>
<form name="phoneform" action="somewhere">
    <fieldset>
        <label>전화번호 <input type="text" name="phone" size="12" /></label>
            - <input type="text" name="phone2" size="12" />
            - <input type="text" name="phone3" size="12" /><br />
        <label>주소 <input type="text" name="address" size="50" /></label>
        <input type="submit" value="제출" />
    </fieldset>
</form>

동적으로 생성되어 폼 컨트롤에 인접하여 표시되는 에러 메시지의 마크업은 다음과 같다. 마크업에 대한 CSS를 입맛에 맞게 제작하여 표시한다면 사용자에게 훌륭한 피드백 도구가 될 것이다! 폼 컨트롤과 같은 부모 block element에 포함되는 점을 참고하도록 하자.

<span class="miya-error-wrapper">
    <span class="miya-error-message-before"></span>
    <span class="miya-error-message-wrapper">
        <span class="miya-error-message">반드시 입력하셔야 하는 사항입니다.</span>
    </span>
    <span class="miya-error-message-after"></span>
</span>

△ Contents

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

chrome notification https 미지원  (0) 2018.02.14
화면상의 위치 가져오기  (0) 2012.08.10
폼 검사기  (0) 2012.08.10
키코드 표  (0) 2012.08.10
쿠키  (0) 2012.08.10
자동완성  (0) 2012.08.10

---------------------------------------
                      키코드표
---------------------------------------

←(백스페이스) = 8
TAB = 9
ENTER = 13
SHIFT = 16
CTRL = 17
ALT = 18
PAUSEBREAK = 19
CAPSLOOK = 20
한/영 = 21
한자 = 25
ESC = 27

스페이스 = 32

PAGEUP = 33
PAGEDN = 34
END = 35
HOME =36

←(중간) = 37
↑(중간) = 38
→(중간) = 39
↓(중간) = 40

INSERT = 45
DELETE = 46


0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57


A = 65
B = 66
C = 67
D = 68
E = 69
F = 70
G = 71
H = 72
I = 73
J = 74
K = 75
L = 76
M = 77
N = 78
O = 79
P = 80
Q = 81
R = 82
S = 83
T = 84
U = 85
V = 86
W = 87
X = 88
Y = 89
Z = 90


윈도우(왼쪽) = 91
윈도우(오른쪽) = 92
기능키 = 93


0(오른쪽) = 96
1(오른쪽) = 97
2(오른쪽) = 98
3(오른쪽) = 99
4(오른쪽) = 100
5(오른쪽) = 101
6(오른쪽) = 102
7(오른쪽) = 103
8(오른쪽) = 104
9(오른쪽) = 105


.(오른쪽) = 110
/(오른쪽) = 111
*(오른쪽) = 106
+(오른쪽) = 107
-(오른쪽) = 109


F1 = 112
F2 = 113
F3 = 114
F4 = 115
F5 = 116
F6 = 117
F7 = 118
F8 = 119
F9 = 120
F10 = 121
F11 = 122
F12 = 123


NUMLOCK = 144
SCROLLLOCK = 145
=(중간) = 187
-(중간) = 189
`(왼쪽콤마) = 192
\(중간) = 220

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

화면상의 위치 가져오기  (0) 2012.08.10
폼 검사기  (0) 2012.08.10
키코드 표  (0) 2012.08.10
쿠키  (0) 2012.08.10
자동완성  (0) 2012.08.10
바코드그리기  (0) 2012.08.10

 <script>
function get_cookie(n) {
    var cn=n+"=", x=0;
    while (x <= document.cookie.length) {
        var y = (x+cn.length);
        if (document.cookie.substring(x, y) == cn) {
            if ((end=document.cookie.indexOf(";", y)) == -1) end = document.cookie.length;
            return unescape(document.cookie.substring(y, end));
        }
        x = document.cookie.indexOf(" ", x) + 1;
        if (x == 0) break;
        }
    return "";
}

function set_cookie(n, v, e, d) {
    if(e==0) document.cookie=n+"="+escape(v)+";PATH=/; DOMAIN="+d+";";
    else {
        var tda=new Date();
        tda.setDate(tda.getDate()+e);
        document.cookie=n+"="+escape(v)+"; PATH=/; EXPIRES="+tda.toGMTString()+"; DOMAIN="+d+";";
    }
}
</script>

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

폼 검사기  (0) 2012.08.10
키코드 표  (0) 2012.08.10
쿠키  (0) 2012.08.10
자동완성  (0) 2012.08.10
바코드그리기  (0) 2012.08.10
동적으로 자바스크립트 로드하기  (0) 2012.08.10

/*
 * Create by nhosw at i-swear.com
 *         Last Modify 2007.09.30
 * 이 주석은 삭제하지마시길 바랍니다.
 */

  document.write('<style type="text/css">#ob { border: #333333 1px solid; padding: 0px; background: #FFFBEE; position: absolute; display: none; overflow-Y: auto; }  #ob div { padding: 2px; cursor:pointer; font-size: 12px; }  #ob div.ajax_hover { background: #FFDCB8; }  #ob div span { font-size: 12px; color:#333333; }  #ob div span.match { color: #FF0000; }  #ob div span.unmatch { color: #333333; }</style>');
  var a_new = null;
  var a_old = null;
  var a_timer = null;
  var a_obj = null;
  var a_int = 300;
  var a_type = null;
  var a_search = null;
  var B="block",I="inline",N="none",UD="undefined";
  var UD = "undefine";
  var han_1 =new Array('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');//초성 19개
  var han_2 =new Array('ㅏ','ㅐ','ㅑ','ㅒ','ㅓ','ㅔ','ㅕ','ㅖ','ㅗ','ㅘ','ㅙ','ㅚ','ㅛ','ㅜ','ㅝ','ㅞ','ㅟ','ㅠ','ㅡ','ㅢ','ㅣ');//중성 21개
  var han_3 =new Array('','ㄱ','ㄲ','ㄳ','ㄴ','ㄵ','ㄶ','ㄷ','ㄹ','ㄺ','ㄻ','ㄼ','ㄽ','ㄾ','ㄿ','ㅀ','ㅁ ','ㅂ','ㅄ','ㅅ','ㅆ','ㅇ','ㅈ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');//종성 28개

  // $ 이 존재하는지 확인.
  if (typeof($) != "function") { function $(id) { return document.getElementById(id); } }
  // _isIE 가 존재하는지 체크
  if (typeof(_isIE) != "boolean") var _isIE=(navigator.userAgent.match(/Gecko/))?false:true;
  if (!$('ob')) { document.write('<div id="ob"></div>'); }
  // lX 가 존재하는지 체크
  if (typeof(lX) != "function") {
        function lX(obj, top, absolute) {
        var x = 0;
        if (!obj) return 0;
        if (_isIE) {
            do {
                if (absolute && obj && obj.style && obj.style.position == 'absolute') break;
                x += obj.offsetLeft+obj.clientLeft-obj.scrollLeft;
                obj = obj.offsetParent;
            }
            while (obj && obj != top);
        }else{
            do {
                if (absolute && obj && obj.style && obj.style.position == 'absolute') break;
                x += obj.offsetLeft-obj.scrollLeft;
                obj = obj.offsetParent;
            }
            while (obj && obj != top);
        }
        if (obj == document.body || !top) x-=document.body.offsetLeft;
        return x;
    }
  }
  // lY 가 존재하는지 체크
  if (typeof(lY) != "function") {
    function lY(obj, top, absolute) {
        var y = 0;
        if (!obj) return 0;
        if (_isIE) {
            do {
                if (absolute && obj && obj.style && obj.style.position == 'absolute') break;
                y += obj.offsetTop+obj.clientTop-obj.scrollTop;
                obj = obj.offsetParent;
            }while (obj && obj != top);
        }else{
            do {
                if (absolute && obj && obj.style && obj.style.position == 'absolute') break;
                y += obj.offsetTop-obj.scrollTop;
                obj = obj.offsetParent;
            }while (obj && obj != top);
        }
        if (obj == document.body || !top) y-=document.body.offsetTop;
        return y;
    }
  }

  function setBox(el, el_type, el_method, event) {
    if (_isIE) var e = window.event;
    else var e = event;
    if (a_obj == el) {
        if (e.keyCode == '40') {    // 아래 화살표
            if ($("ob").style.display == B || $("ob").style.display == "") {
                var cnt = $("ob").childNodes.length;
                for (var i=0; i<cnt; i++) {
                    if ($("ob").childNodes[i].className == "ajax_hover") {
                        if (i < cnt - 1) $("ob").childNodes[i+1].className = "ajax_hover";
                        if (i < cnt - 1) $("ob").childNodes[i].className = "";
                        return;
                    }
                }
                $("ob").firstChild.className = "ajax_hover";
            }
            e.returnValue=false;
        }
        else if (e.keyCode == '38') { // 위로 화살표
            if ($("ob").style.display == B || $("ob").style.display == "") {
                var cnt = $("ob").childNodes.length;
                for (var i=cnt-1; i>=0; i--) {
                    if ($("ob").childNodes[i].className == "ajax_hover" && i > 0) { $("ob").childNodes[i].className = ""; $("ob").childNodes[i-1].className = "ajax_hover"; return false; }
                }
                $("ob").firstChild.className = "ajax_hover";
            }
            e.returnValue=false;
        }
        else if (e.keyCode == '13') { // 엔터
            m_in(el);
            e.returnValue=false;
        }
        if (a_timer == null) { return; }
    }
   
    el.setAttribute("autocomplete", "off");    // 브라우저 자동완성 끄기.

    a_timer = null;
    a_obj = el;
    a_type = el_type;
    $("ob").style.top = lY(el) - 30;
    $("ob").style.left = lX(el) - 5;

    if (a_type == 'array') {
        try {
        if (typeof(el_method) == 'string') a_search = eval(el_method);
        else a_search = el_method;
        }
        catch (e) {
            window.alert("자동완성을 사용할 수 없습니다.");
            el.onkeydown = null;
            return;
        }
        textMatch();
    }
  }
  function setBoxDeclare() {
    if (a_timer != null) {
    window.clearTimeout(a_timer);
    a_timer = null;
    a_new = a_obj.value;
    a_old = a_new;
    a_obj = null;
    }
    $("ob").style.display = N;
  }
  function m_in(el) {
    if (!el) el = a_obj;
    if ($("ob").style.display == B || $("ob").style.display == "") {
        var cnt = $("ob").childNodes.length;
        for (var i=0; i<cnt; i++) {
            if ($("ob").childNodes[i].className == "ajax_hover") { el.focus(); el.value = $("ob").childNodes[i].getAttribute("text", 1);  }
        }
    setBoxDeclare();
    }             
  }
  function m_on(el) {
      var el_p = el.parentNode;
      var cnt = el_p.childNodes.length;
      for (var i = 0; i<cnt; i++) { el.className = "ajax_hover"; if (el_p.childNodes[i] == el) continue; if (el_p.childNodes[i].className == 'ajax_hover') el_p.childNodes[i].className = "";  }
  }
  function textMatch() {
    var ma = null, un_ma = null;
    var str = "";
    if (a_obj != null) a_new = a_obj.value;
    var a_new_len = a_new.length;
    var jamo = false;
    var s = "";
   
    if (a_new == "") $("ob").style.display = N;
    if (a_new != a_old) {
        a_old = a_new;
        for (var i=0; i<a_search.length; i++) {
            ma = ""; un_ma = "";
            if (a_search[i].substring(0, a_new_len) == a_new) { ma = a_new; un_ma = a_search[i].substring(a_new_len); }
            if (ma != "") {
                str += '<div text="' + ma + un_ma + '" onmouseover="m_on(this);" onclick="m_in();"><span class="match">' + ma + '</span><span class="unmatch">' + un_ma + '</span></div>';
            }
        }
        // 루프를 돌았는데도 결과값이 없다면..
        if (str == "" && a_new.match(/[^0-9a-zA-Z_\.\/]$/)) {
            if (a_new.match(/.[ㄱ-ㅎ]$/)) {
                a_new_len--;
                a_new = a_new.substring(0, a_new_len);
            }
            else if (a_new.match(/[a-z0-9A-Zㄱ-ㅎ]$/)) {
//                a_new = a_new.substring(a_new_len - 1);
                jamo = true;
                var tmp = getJamoCodes(a_new.substring(a_new_len - 1));
                a_new = a_new.substring(0, a_new_len - 1) + han_1[tmp[0]-1];
            }
            for (var i=0; i<a_search.length; i++) {
                ma = ""; un_ma = "";
                if (jamo == false) { s = a_search[i].substring(0, a_new_len); }
                else { tmp = getJamoCodes(a_search[i].substring(a_new_len - 1, a_new_len)); s = a_search[i].substring(0, a_new_len - 1) + han_1[tmp[0]-1]; }
                if (s == a_new) {
                    str += '<div text="' + a_search[i] + '" onmouseover="m_on(this);" onclick="m_in();"><span class="unmatch">' + a_search[i] + '</span></div>';
                }
            }
        }
        if (str != "") {
        $("ob").style.width = "";
        $("ob").style.height = "";
        if ($("ob").style.display == "" || $("ob").style.display == N) $("ob").style.display = B;
        if ($("ob").offsetWidth < 150) $("ob").style.width = "150px";
        if ($("ob").offsetHeight > 100) $("ob").style.height = "100px";
        $("ob").innerHTML = str;
        }
    }

    a_timer = window.setTimeout("textMatch()", a_int);
  }

  // 초,중,종성으로 한글을 잘라줌. 한글이 아닐 경우는 배열로 (0,0,0) 리턴 Created By PHPSCHOOL alee
  function getJamoCodes(t) {
    var c = t.charCodeAt(0), c = c<0x3130?0:c<0x3164?c-0x3130:c<0xac00?0:c<0xd7a5?c+68:0;
    if (c>51) return Array((c-c%588)/588-74,((c-c%28)/28)%21+1,c%28);
    return Array(c<3?c:c<4?0:c<5?c-1:c<7?0:c<10?c-3:c<17?0:c<20?c-10:c<21?0:c<31?c-11:0,c<31?0:c-30,0);
  }

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

키코드 표  (0) 2012.08.10
쿠키  (0) 2012.08.10
자동완성  (0) 2012.08.10
바코드그리기  (0) 2012.08.10
동적으로 자바스크립트 로드하기  (0) 2012.08.10
동적으로 js 로딩  (0) 2012.08.10

/*
   Create by nhosw at i-swear.com
   2007. 05. 08 어버이날을 맞이하여..

   이 주석은 지우지 말아주시길 바랍니다.

   ps. 사용중 더 좋은 방법이나 버그가 있을 경우 메일로 부탁드립니다.
   소스를 오픈한다는것은 더 좋은 소스로 고치기 위함이 아닐까요......
   감사합니다.

   사용법
   바코드를 그릴 페이지에 아래의 스타일 시트를 선언해주셔야 합니다.
  <style type="text/css">
  .space { background:#FFFFFF;float:left;margin:0;padding:0;cursor:default; }
  .bar { background:#000000;float:left;margin:0;padding:0;cursor:default; }
  .bartext { clear:both;font-family:Fixedsys,Arial;font-size:12px;cursor:default; }
  </style>
  바코드를 그릴 라인에서 아래와 같이 써줍니다.

  <script type="text/javascript">barcode("1234567890", 40);</script>
  <script type="text/javascript">barcode("i-swear.com", 40);</script>
*/
  var s;
  var b;
  var b_;
  var s_;
  var bar_ar = new Array();
  bar_ar["0"] = "1010011011010";
  bar_ar["1"] = "1101001010110";
  bar_ar["2"] = "1011001010110";
  bar_ar["3"] = "1101100101010";
  bar_ar["4"] = "1010011010110";
  bar_ar["5"] = "1101001101010";
  bar_ar["6"] = "1011001101010";
  bar_ar["7"] = "1010010110110";
  bar_ar["8"] = "1101001011010";
  bar_ar["9"] = "1011001011010";
  bar_ar["A"] = "1101010010110";
  bar_ar["B"] = "1011010010110";
  bar_ar["C"] = "1101101001010";
  bar_ar["D"] = "1010110010110";
  bar_ar["E"] = "1101011001010";
  bar_ar["F"] = "1011011001010";
  bar_ar["G"] = "1010100110110";
  bar_ar["H"] = "1101010011010";
  bar_ar["I"] = "1011010011010";
  bar_ar["J"] = "1010110011010";
  bar_ar["K"] = "1101010100110";
  bar_ar["L"] = "1011010100110";
  bar_ar["M"] = "1101101010010";
  bar_ar["N"] = "1010110100110";
  bar_ar["O"] = "1101011010010";
  bar_ar["P"] = "1011011010010";
  bar_ar["Q"] = "1010101100110";
  bar_ar["R"] = "1101010110010";
  bar_ar["S"] = "1011010110010";
  bar_ar["T"] = "1010110110010";
  bar_ar["U"] = "1100101010110";
  bar_ar["V"] = "1001101010110";
  bar_ar["W"] = "1100110101010";
  bar_ar["X"] = "1001011010110";
  bar_ar["Y"] = "1100101101010";
  bar_ar["Z"] = "1001101101010";
  bar_ar["*"] = "1001011011010";
  bar_ar["-"] = "1001010110110";
  bar_ar["."] = "1100101011010";
  bar_ar[" "] = "1001101011010";
  bar_ar["$"] = "1001001001010";
  bar_ar["/"] = "1001001010010";
  bar_ar["+"] = "1001010010010";
  bar_ar["%"] = "1010010010010";


  function barcode(str,height, barwidth, doublebarwidth, spacewidth, doublespacewidth, bgcolor,fontcolor) {
    if (barwidth && !spacewidth) spacewidth = barwidth;
    if (doublebarwidth && !doublespacewidth) doublespacewidth = doublebarwidth;
    if (!barwidth) barwidth = 1;
    if (!doublebarwidth) doublebarwidth = 2;
    if (!spacewidth) spacewidth = 1;
    if (!doublespacewidth) doublespacewidth = 2;
    if (!height) height = 100;
    if (!bgcolor) bgcolor = "#000000";
    else bgcolor = "#"+bgcolor;
    // s = space , b = bar
    var data = "";
    var text_width = 0;
    if (barwidth == 0) return;
    if (!str) return;
    str = "*"+str+"*";
    var strlen = str.length;
    var txtchar = null;
   

    s = "<div class='space' style='width:"+spacewidth+"px;height:"+height+"px'></div>";
    s_ = "<div class='space' style='width:"+doublespacewidth+"px;height:"+height+"px'></div>";
    b = "<div class='bar' style='width:"+barwidth+"px;height:"+height+"px;background:"+bgcolor+"'></div>";
    b_ = "<div class='bar' style='width:"+doublebarwidth+"px;height:"+height+"px;background:"+bgcolor+"'></div>";
    data = "<div style='position:absolute;'>";
    for (var i=0; i<strlen; i++) {
    txtchar = str.substring(i, i+1).toUpperCase();
    data += bar_fun(txtchar);
    // space 몇개인지 찾는다.
    tmp = bar_ar[txtchar].match(/0/g);
    text_width += tmp.length * spacewidth;
    // Bar 몇개인지 찾는다.
    tmp = bar_ar[txtchar].match(/1/g);
    text_width += tmp.length * barwidth;
    // doublebar 몇개인지 찾는다.
    tmp = bar_ar[txtchar].match(/2/g);
    text_width += tmp.length * doublebarwidth;
    // doublespace 몇개인지 찾는다.
    tmp = bar_ar[txtchar].match(/3/g);
    text_width += tmp.length * doublespacewidth;
    }

    text_width -= 5;
    data += "<div class='bartext' style='width:"+text_width+"px;text-align:justify;text-justify:distribute-all-lines;font-size:11px;color:#"+fontcolor+"'>"+str.toUpperCase()+"</div>";
    data += "</div>";
    document.writeln(data);
  }

  function bar_fun(str) {
    var data = "";
    var prev_tmp = "";
    bar_ar[str] = bar_ar[str].replace(/[0]{2}/g, "3");    // 3 넓은 화이트 스페이스
    bar_ar[str] = bar_ar[str].replace(/[1]{2}/g, "2");    // 2 넓은 바

    for (var i=0; i<bar_ar[str].length; i++) {
    tmp = bar_ar[str].substring(i, i+1);
        if (tmp == "0") data += s;
        else if (tmp == "1") data += b;
        else if (tmp == "2") data += b_;
        else data += s_;
    }
    // for
    return data;
  }

 

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

쿠키  (0) 2012.08.10
자동완성  (0) 2012.08.10
바코드그리기  (0) 2012.08.10
동적으로 자바스크립트 로드하기  (0) 2012.08.10
동적으로 js 로딩  (0) 2012.08.10
Rowspantable  (0) 2012.08.10

 http://www.developpez.net/forums/archive/index.php/t-158898.html

 

 function innerHTMLJS(obj,content)
{
/* Copyleft by GourouLubrik 2006 */
if(typeof(obj) != 'object' && typeof(content) != 'string') return;
obj.innerHTML = content;

var scripts = obj.getElementsByTagName('script');
if(scripts == false) return true; // no node script == no problem !
for (var i=0;i<scripts.length;i++)
{
var scriptclone = document.createElement('script');
if(scripts[i].attributes.length > 0) /* boucle de copie des attributs du script dans le nouveau node */
{
for (var j in scripts[i].attributes)
{
if(typeof(scripts[i].attributes[j]) != 'undefined'
&& typeof(scripts[i].attributes[j].nodeName) != 'undefined' /* IE needs it */
&& scripts[i].attributes[j].nodeValue != null
&& scripts[i].attributes[j].nodeValue != '' /* IE needs it ou il copie des nodes vides */)
{
scriptclone.setAttribute(scripts[i].attributes[j].nodeName,scripts[i].attributes[j].nodeValue);
}
}
}
scriptclone.text = scripts[i].text; // on copie le corp du script
/*
la j'ai pas compris, si je ne return pas sous opera ici : le javascript s'execute 2 fois -
mais la : le script s'execute mais n'est pas a ce moment la placé entre les balises scripts !
et si je return juste après le innerHTML, le script n'est pas executé... ---o(<
*/
if (navigator.userAgent.indexOf("Opera")>0) { return; }
/* on force le remplacement du node par dom, qui a pour effet de forcer le parsing du javascript */
scripts[i].parentNode.replaceChild(scriptclone,scripts[i]);
}
return true;
}


A propos d'ajax, pour tous les adeptes de PHP je conseille très vivement le script disponible sur http://www.hemmady.com/ajaxagent
je ne mets pas le reste de mon contenu php/js car il se base sur cette librairie.
Elle est absolument géniale, et la découverte de JSON est un bonheur pour convertir les objets PHP en javascript.
PS: Ne pas oublier de str_replace("\"","\\\"") vos contenus JSON sous peine de plantage instantané de votre navigateur =).

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

자동완성  (0) 2012.08.10
바코드그리기  (0) 2012.08.10
동적으로 자바스크립트 로드하기  (0) 2012.08.10
동적으로 js 로딩  (0) 2012.08.10
Rowspantable  (0) 2012.08.10
Ctrl F 를 웹에서 구현  (0) 2012.08.10

 <script>
function bgfunc(filenm) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = filenm;
    document.getElementsByTagName('head')[0].appendChild(script); 
}
</script>

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

바코드그리기  (0) 2012.08.10
동적으로 자바스크립트 로드하기  (0) 2012.08.10
동적으로 js 로딩  (0) 2012.08.10
Rowspantable  (0) 2012.08.10
Ctrl F 를 웹에서 구현  (0) 2012.08.10
jQuery ajaxUpload handleError not defined 에러  (2) 2012.04.20

/*
 * Create by nhosw at i-swear.com
 *         Last Modify 2007.05.19
 * 이 주석은 삭제하지마시길 바랍니다.
 */

  /*
   * rowspantable
   * @param string tbl 테이블이름
   * @param int sortnode 정렬기준점 , 0이면 기준점 없음
   * @param int sortdirect 정렬방향, 0이면 무지향, 1이면 왼쪽으로 나가면서 rowspan, 2면 우측으로 가면서 rowspan
   * @param boolean sorttype 정렬타입, false 이면 무조건 정렬, true이면 기준점이 rowspan 되어야 rowspan 됨
   * @param boolean thfind 테이블의 최상위 td 검사 여부 true 면 검사, false 면 검사 안함 디폴트 false
   */
  var tblArr;
  function rowspantable(tbl, sortnode, sortdirect, sorttype, thfind) {
    tblArr = null;
    tblArr = Array();
    var tmpArr = Array();
    var tr = null;
    var td = null;
    var tmp = null;
    if (typeof(tbl) != "object") tbl = document.getElementById(tbl);
    // 인자가 올바른지 확인
    if (!tbl) return;
    if (sortdirect != 0 && sortdirect != 1 && sortdirect != 2) return;
    if (sorttype != true && sorttype != false) return;
    if (!thfind) thfind = 1;
    else thfind = 0;
    // 인자가 올바른지 확인 end

    nodeFind(tbl , 0, 0);

    // 1차원 배열
    var trcnt = tblArr.length;
    for (var i=0; i<tblArr.length; i++) {
        if (!tblArr[i]) continue;
        // 2차원 배열
        for (var j=0; j<tblArr[i].length; j++) {
            if (!tblArr[i][j]) continue;
                // tdnode 가 sortnode 보다 크다면 continue

                if (sortdirect == 1 && j > sortnode) continue;
                if (sortdirect == 2 && j < sortnode) continue;

                // Rowspan 하기 위해 검사합니다.
                if (i < trcnt - 1 && tblArr[i][j] == tblArr[i+1][j]) {
                    // sorttype 이 true 이면 기준점 확인할것.
                    if (sorttype == true) {

                        if (tblArr[i][sortnode] != tblArr[i+1][sortnode]) continue;
                    }
                        // tmpArr 에 넣는다
                    tmpArr[tmpArr.length] = i+","+j;
                }
        }
        // 2차원 배열 End
    }
    // 1차원 배열 end

    // tblArr 초기화
    tblArr = null;

    // rowspan
    for (var i=tmpArr.length-1; i>=0; i--) {
        tmp = tmpArr[i].split(",");
        tr = tmp[0];
        td = tmp[1];
        if (tr <= thfind) continue;
        tbl.childNodes[0].childNodes[tr-1].childNodes[td-1].rowSpan = tbl.childNodes[0].childNodes[tr].childNodes[td-1].rowSpan + 1;
        tbl.childNodes[0].childNodes[tr].childNodes[td-1].removeNode(true);
    }

  }

  function nodeFind(el, trnode, tdnode) {
  var cnt = el.childNodes.length;
  var tmp = new Array();
  try {
    for (var i=0; i<cnt; i++) {
        // tr 일 경우 trnode++
        if (el.childNodes[i].nodeName == "TR") { trnode++; tdnode = 0; }
        else if (el.childNodes[i].nodeName == "TD" || el.childNodes[i].nodeName == "TH") { tdnode++; }
        if (el.childNodes[i].nodeValue) {
            if (!tblArr[trnode]) tblArr[trnode] = Array();
            tblArr[trnode][tdnode] = el.childNodes[i].nodeValue;
        }
        if (el.childNodes.length > 0) nodeFind(el.childNodes[i], trnode, tdnode);
    }
  }
  catch (e) { return; }

  }

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > JavaScript' 카테고리의 다른 글

동적으로 자바스크립트 로드하기  (0) 2012.08.10
동적으로 js 로딩  (0) 2012.08.10
Rowspantable  (0) 2012.08.10
Ctrl F 를 웹에서 구현  (0) 2012.08.10
jQuery ajaxUpload handleError not defined 에러  (2) 2012.04.20
IE8 jQuery not working fadeIn fadeOut  (2) 2012.03.09

+ Recent posts

티스토리 툴바