Translate

레이블이 jQuery인 게시물을 표시합니다. 모든 게시물 표시
레이블이 jQuery인 게시물을 표시합니다. 모든 게시물 표시

2019년 12월 13일 금요일

[jQuery] option 태그 주석 처리하는 방법 (select 검색 기능 만들기)


Laptop
운영체제 Windows 10 Pro 64bit
개발환경 Chrome 버전 78.0.3904.108
jQuery 1.9.1

select 내부의 option 태그를 조건에 따라 보이거나 숨기고 싶을때, <span>태그로 둘러쌈으로써 구현할 수 있다.
jquery로 .wrap(), .unwrap() 함수를 이용하면 된다.

예)
<select>
  <option value="C">C</option>
  <option value="C++">C++</option>
  <option value="Java">Java</option>
  <option value="JavaScript">JavaScript</option>
</select>


$("select option[value='C']").wrap("<span/>");


<select>
  <span><option value="C">C</option></span>
  <option value="C++">C++</option>
  <option value="Java">Java</option>
  <option value="JavaScript">JavaScript</option>
</select>

단, unrwrap 시 html 구조가 select > span > option이 되므로 선택자 입력 시 주의해야한다. (지금의 경우에는 위 wrap 코드에서 unwrap으로만 바꾸면 된다.)

이것을 응용하여 검색창에 입력된 단어를 포함하는 내용만 나오도록 option을 조정하는 기능을 만들 수 있다.




- 참고 사이트: https://stackoverflow.com/questions/36066953/css-hide-options-from-select-menu-on-iphone-safari/44332652

2019년 11월 27일 수요일

[jQuery] 숫자만 입력되는 input 칸 만들기 (+ 날짜 포맷)


Laptop
운영체제 Windows 10 Pro 64bit
개발환경 Chrome 버전 78.0.3904.108
jQuery 1.9.1

입력칸에서 숫자만 입력받아야 할 경우, 입력 이벤트를 받아 정규 표현식을 사용하여 입력한 값이 숫자가 아닐 경우 지워버리는 기능과
이를 응용하여 사용자가 숫자를 입력할때 날짜 포맷으로 자동으로 바뀌도록 하고, 맞는 날짜인지 체크하는 예제이다.


2018년 9월 17일 월요일

[jQuery] 채팅 스크롤 구현 (최하단 자동 포커싱 + 이동 버튼 및 안 읽은 수 표시)


Laptop
운영체제 Windows 10 Home 64bit
브라우저 Chrome 버전 68.0.3440.106

채팅창처럼 수시로 행이 늘어나는 table의 경우 몇몇 편의상의 스크롤 제어가 필요하다.
일단 기능 자체는 메신저 텔레그램에서 영감을 많이 얻었다.

수행하는 기능은
1. 새로운 행 추가 시 자동으로 부드럽게 최하단 스크롤
2. 이전 기록으로 (위로) 스크롤 시 다시 보던 위치로 이동할 수 있는 버튼 플로팅
3. 버튼이 떠있는 동안은 자동 스크롤이 되지 않음
4. 버튼이 떠있는 동안 새로운 라인이 추가될 시 안 읽은 수가 표시

html구조는 스크롤을 제어할 div안에 동적 table이 있고, 버튼은 div 두개를 써서 하나는 실제 보이는 버튼, 하나는 버튼이 숨김 상태일 때 가리기 위한 용도이다. 즉, 보임/숨김은 단순히 top 조정으로 제어된다.

결과물은 다음과 같다.
css는 기본적인 것 외에는 거의 적용하지 않았고, 버튼 디자인은 다른 소스를 참고한 것이니 세부적인 건 하단 참고 사이트 링크에서 확인하면 된다.






- 참고 사이트
동적 테이블 추가: https://qkrrudtjr954.github.io/jquery/2018/01/29/jquery-dynamic-table.html

스크롤 애니메이션: http://jamesdreaming.tistory.com/215

슬라이드 버튼: http://brilliantcoding.tistory.com/entry/JQuery-%EC%8A%A4%ED%81%AC%EB%A1%A4%EC%97%90-%EB%94%B0%EB%9D%BC-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%93%9C-%EB%90%98%EB%8A%94-%ED%97%A4%EB%8D%94-%EB%A7%8C%EB%93%A4%EA%B8%B0


2017년 4월 5일 수요일

Blogger jQuery 적용 및 자체 스크롤 만들기


* Blogger 기본 테마 중 '세련' 테마 적용 중에 작성하였다.

항목 중에서 Tap 영역에 overflow: auto; 로 스크롤을 추가하였는데, div태그라 그런지 전체 스크롤과 동시에 움직이는 문제가 발생하였다.

검색해보니 두가지 해결법이 있는데,
mouseenter 이벤트를 이용하여 커서가 div에 진입할때 전체 스크롤를 없애거나(overflow: hidden;)
mousewheel 이벤트를 이용하여 스크립트로 작동하는 자체 스크롤을 만들어주는것.

후자가 더 깔끔해보여서 선택하기로 했다.
좋은지 나쁜지 애매한 점은 스크롤이 눈으로 보이진 않는다.

일단 CSS부분은 overflow: hidden; 으로 바꿔준다.
(이전글 http://bluebead38.blogspot.kr/2017/04/blogger-css.html 참고)


일단 소스는 다음과 같다.


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js">
    <!-- jQuery Connection -->
</script>

<script>
    $(function() {

        // column-left-outer class 지정 개체에서 스크롤 액션이 감지될 때
        $('.column-left-outer').on('mousewheel DOMMouseScroll', function(e) {

            var E = e.originalEvent;

            // 스크롤 액션의 변화값 증감에 따라 화면 스크롤 변화
            if (E.wheelDelta >= 100) {

                this.scrollTop -= 20;

            } else if (E.wheelDelta < -100) {
              
                this.scrollTop += 20;

            }

            return false;

        });

    });
</script>

이걸 그대로 복사하면 기호를 인식하지 못하고 오류가 난다.
Entity Name으로 전환해주는 작업이 필요하다.

https://mothereff.in/html-entities
여기서 간단하게 전환이 가능하다.
allow named character references in output도 체크해준다.


결과적으로는 아래 소스를 추가하면 된다. (주석도 같이 전환되기 때문에  지저분해서 지웠다.)
붙여넣는 위치는 <head> 내부면 된다. 적당히 </head> 위로 했다.



<b:include data='blog' name='google-analytics'/>
&lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js&quot;&gt;
    &lt;!-- jQuery Connection --&gt;
&lt;/script&gt;

&lt;script&gt;
    $(function() {

     
        $(&apos;.column-left-outer&apos;).on(&apos;mousewheel DOMMouseScroll&apos;, function(e) {

            var E = e.originalEvent;
          
            if (E.wheelDelta &gt;= 100) {

                this.scrollTop -= 20;
           
            } else if (E.wheelDelta &lt; -100) {
                this.scrollTop += 20;

            }
            return false;
        });
    });
&lt;/script&gt;

</head>



+ 문제점
Firefox에서는 작동하지 않는다.
좀더 자세히 말하면 DOMMouseScroll 까진 인식이 되나 scrollTop에서 문제가 생기는듯하다.

+다음 소스로 수정하면 Firefox에서도 동작한다.


$( '.column-left-outer' ).on( 'mousewheel DOMMouseScroll', function ( e ) {
    var E = e.originalEvent;
    delta = E.wheelDelta || -E.detail;

    this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;
    e.preventDefault();
});

알아보니 detail이라는 값이 Firefox에서만 사용되는 값인데, +, - 만 구분하기 때문에 값을 더 곱함으로써 스크롤처럼 보이도록 하는 것 같다.


참고 사이트 :
http://alik.info/p/65
http://stackoverflow.com/questions/7600454/how-to-prevent-page-scrolling-when-scrolling-a-div-element
http://recoveryman.tistory.com/120