'Technical Note'에 해당되는 글 134건

Technical Note/HTML & CSS

Update on 2012-01 : 오래된 글을 보니 부끄럽기 짝이 없군요. 요즘은 이것보다 더 말끔하게, HTML과 JavaScript를 완전히 분리하는 방법을 선호하는 추세입니다. Unobtrusive JavaScript라고도 하는데요,


<="" a="">



<a href="http://www.google.com" id="google">Google</a>

<script>

$('#google').click(function(e) { e.preventDefault(); window.open(this.href); });

</script>


대충 이런 방식으로 구현합니다. 스크립트는 완전히 다른 파일에 따로 구현할 수 있고, 화면과 동작을 따로 구현할 수 있어서 훨씬 말끔하지요.


----


이번에도 사내게시판에 쓴 글을 옮겨왔습니다.

----

아래의 글에 이어서 <a href="#" onclick="...."> 의 말끔한 대안을 제안해봅니다.


보통 이렇게들 많이 쓰죠?


<a href="#" onclick="window.open('http://www.makeshop.co.kr/', 'makeshop', '....');">


이 방식은 치명적인 단점이 있습니다. href="#"에 의해서 페이지가 최상단으로 스크롤업 되버린다는거죠. 웹페이지의 사용성 측면에서 볼때 사용자가 보고있던 페이지 위치를 확 벗어나게 되니까 당황할 수가 있겠죠. 좋은 방법이 아닙니다.


그래서 많이들 쓰던 방법이 void();함수를 이용하는 것인데요,


<a href="javascript:void(0);" onclick="....">


위와 같은 형태로 쓰는겁니다. void() 함수는 아무것도 하지 않는 함수입니다. 그러니 클릭했을 때 실행되는 href값은 아무 일도 하지 않겠죠 ㅎㅎ 썩 괜찮은 대안이긴 합니다. void() 에 0을 넣지 않으면 firefox에서는 오류가 납니다.


그런데 void를 쓰는게 왠지 찜찜하기도 하고... 해서 약간 개선된 방법이 


<a href="javascript:;" onclick="....">


void()도 아무일 하지 않는 함수지만, ; 는 정말로 아무것도 하지 않는 문장이죠 ㅎㅎ 이 정도면 굉장히 말끔한 해결책이라고 생각




하고 오랜 세월을 살았었습니다. -,.-);;;


그런데 amazon.com에서 영어사전을 펼쳐놓고 원서를 주문하던 그 어느날, 분명히 팝업창인데도 불구하고 링크의 주소가 브라우저의 상태표시줄에 보여지는!! 기이한 현상을 발견하고 말았습니다. 원래 a링크에서의 href값은, 마우스를 링크에 오버하면 브라우저 상태표시줄에 표시가 되죠! 하지만 onclick절에 쓰여진 주소값이 보여질리 없건마는..........


즉시 "소스보기"를 열어 보았더니...


<a href="http://www.amazon.com/some/path/" onclick="window.open(this.href, '', ''); return false;">


오오! 이런 방법이. 저는 이것이 가장 말끔한 팝업창 띄우는 방법이라고 생각을 합니다.

-링크에 마우스 포인터를 가져가면 상태표시줄에 링크가 표시되므로 사용자가 미리 링크를 확인할 수가 있고요,

-행여 js가 작동하지 않는 상황에서도 링크가 의미를 가지고 작동을 한다.

-# 를 쓸때처럼 페이지가 이동하지도 않는다.

-그리고 별로 어렵지도 않다.


javascript와 사용성/웹표준에 대한 좀 더 포괄적인 문서는 http://hyeonseok.com/docs/accessible-javascript/

Technical Note/JAVASCRIPT & JQUERY

http://technet.ui2.co.kr/wiki/index.php/Velocity  velocity wiki 페이지 


velocity 를 기본적으로 사용하기 위한 jar  파일 목록이다.

velocity-dep-*.jar : velocity 그리고 관련된 클래스 파일 

velocity-tools-*.jar : velocity tool 

commons-digester 

commons-collections 

commons-beanutils 



1. VTL(Velocity Template Language) 장점

@ UI 디자이너와 개발자의 병렬 개발 가능

@ 각각의 영역에 집중가능

@ 유지보수 용의

@ JSP,PHP 대체방안 제시



2. VTL 문장은 # 으로 시작하며  변수명은 $ 로 표시한다.

# set( $foo = "Velocity")



3. 주석처리방법

한줄 : ##

여러줄 : #*  *#



4. 자바객체사용해서 하위 객체 접근이 가능하다

$ custom.Address

$ custom.getAddress()



5. 값을 불러오는 여러가지 방법

$ customer.address 를 다음과 같이 표현할수 있다.

$ getaddress()

$ getAddress()

$ get("address")

$ isAddress()

6. 중간에 변수가 들어가서 잘못 파싱되는것을 방지하기위해 쓰는 방식인데 

기본적으로 이렇게 처리하는 버릇을 들이자.

Jack is a $vicemaniac.

Jack is a ${vice}maniac.



7. 값이 없을 시에 공백처리를 원할때

<input type="text" name="email" value="$!email>

좀더 안전하기를 원하면 value="$!{email}"

8. #set 지시자 사용시 큰따옴포("") 안의 내용은 파싱되어 그 결과물을 출력한다.

#set( $template = "$directoryRoot / $templateName")



9. '' 작은 따옴표는 파싱되지 않고 내용이 그대로 출력되지만 

velocity.properties 안의 Stringliterals.interpolote = false 값을 바꿈으로서 파싱이 되도록 설정한다.



10. for 문으로 반복문을 처리하고 싶을때

iterator 와 비슷한 형태의 구조이다.

#foreach($page in $boardList)

<!-- 처리하고자 하는 내용 -->

#end

11. if 문을 쓰고싶을때

#if($velocityCount <= 3)

   $item

#end


Technical Note/JAVASCRIPT & JQUERY

jsp웹에서 ajax 함수를 호출하여 서버로 한글 파라미터를 전송하면 한글이 깨집니다.


AJAX가 기본적으로 파라미터를 UTF-8로 인코딩하여 전송을 한다고 하더군요.


이것 때문에 몇일 고생했네요..


이것저것 해보고, 괜히 톰캣도 만지작거리기도 하다가 결국...


비베스크립트 써서 Hex코드 변환하는 방식으로 해결을 했지만..


쌩뚱맞게 왠 비베인가 싶어서..다시 방법을 찾다가 결국 아주 간단하게 해결을 봤네요.


파라미터를 보내는 jsp단에서 해당 파라미터를 다음과 같이 처리합니다.


escape(encodeURIComponent('한글파라미터'));


XMLHttpRequest의 send함수를 통해서 스트럿츠 단으로 파라미터를 전송하게 되면..


스트럿츠(Action클래스)에서는 이 UTF-8로 날아온 파라미터를 다시 디코딩을 해줍니다.


URLDecoder.decode('받은파라미터', "UTF-8"); 

Technical Note/JAVASCRIPT & JQUERY

- 각 Ajax 방식을 호출하는 방법

  1. // 버튼 클릭시 ajax 실행  
  2. $("#btnOK").click(function(){  
  3.       
  4.     var url="test.aspx";  
  5.     var params="param1="+param1+"¶m2="+param1;  
  6.   
  7.     $.ajax({      
  8.         type:"POST",  
  9.         url:url,      
  10.         data:params,      
  11.         success:function(args){   
  12.             $("#result").html(args);      
  13.         },   
  14.         beforeSend:showRequest,  
  15.         error:function(e){  
  16.             alert(e.responseText);  
  17.         }  
  18.     });  
  19.       
  20. });  

 

 

1. $.post() 방식

 

- 서버에 데이터를 HTTP POST 방식으로 전송한 후 서버측 응답 받을 때 사용

 

[형식]

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

 

- url : 요청 Url

- data : 요청과 함께 서버에 보내는 string 또는 map

- success(data,textStatus,jqXHR) : 요청이 성공일때 실행되는 callback 함수

- dataType : 서버에서 내려온 data 형식. ( default : xml,json,script,text,html )

 

 

[$.ajax 로 표현]

  1. $.ajax({  
  2.   type: 'POST',  
  3.   url: url,  
  4.   data: data,  
  5.   success: success,  
  6.   dataType: dataType  
  7. });  

 

 

[사용예]

  1. // 요청 Url 만 , 리턴 결과값 무시  
  2. $.post("http://web/test/");  
  3.   
  4. // 요청 Url + 추가적으로 보내는 Json Data, 리턴 결과값 무시  
  5. $.post("http://web/test/", { name: "John", time: "2pm" } );  
  6.   
  7. // 요청 Url + 추가적으로 보내는 Array Data, 리턴 결과값 무시  
  8. $.post("http://web/test/", { 'choices[]': ["Jon""Susan"] });  
  9.   
  10. // 요청 Url + 폼데이터, 리턴 결과값 무시  
  11. $.post("http://web/test/", $("#testform").serialize());  
  12.   
  13. // 요청 Url, xml(또는 html)리턴 결과값  
  14. $.post("http://web/test/",   
  15.       function(data) {    alert("Data Loaded: " + data);  });  
  16.   
  17. // 요청 Url + 추가적으로 보내는 Json Data, 리턴결과값, 결과값 형식  
  18. $.post("http://web/test/", { name: "John", time: "2pm" },    
  19.       function(data) {    process(data);  },   "xml" );  
  20.   
  21. // 요청 Url + 추가적으로 보내는 Json Data, 리턴결과값(json 다루는 형식), 결과값 형식  
  22. $.post("http://web/test/", { "func""getNameAndTime" },    
  23.       function(data){      
  24.                      console.log(data.name); // John      
  25.                      console.log(data.time); //  2pm    
  26.       }, "json");  

 

 

 

 

2. $.get() 방식

 

- 서버에 데이터를 HTTP GET 방식으로 전송한 후 서버측 응답 받을 때 사용

 

[형식]

jQuery.get(  url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

 

- url : 요청 Url

- data : 요청과 함께 서버에 보내는 string 또는 map

- success(data,textStatus,jqXHR) : 요청이 성공일때 실행되는 callback 함수

- dataType : 서버에서 내려온 data 형식. ( default : xml,json,script,text,html )

 

 

[$.ajax 로 표현]

  1. $.ajax({  
  2.   url: url,  
  3.   data: data,  
  4.   success: success,  
  5.   dataType: dataType  
  6. });  

 

 

[사용예]

  1. // 요청 Url 만 , 리턴 결과값 무시  
  2. $.get("http://web/test/");  
  3.   
  4. // 요청 Url + 추가적으로 보내는 Json Data, 리턴 결과값 무시  
  5. $.get("http://web/test/", { name: "John", time: "2pm" } );  
  6.   
  7. // 요청 Url + 추가적으로 보내는 Array Data, 리턴 결과값 무시  
  8. $.get("http://web/test/", { 'choices[]': ["Jon""Susan"] });  
  9.   
  10. // 요청 Url, xml(또는 html)리턴 결과값  
  11. $.get("http://web/test/"function(data) {    alert("Data Loaded: " + data);  });  
  12.   
  13. // 요청 Url + 추가적으로 보내는 Json Data, 리턴결과값, 결과값 형식  
  14. $.get("http://web/test/", { name: "John", time: "2pm" },  function(data) {    process(data);  },   "xml" );  
  15.   
  16. // 요청 Url + 추가적으로 보내는 Json Data, 리턴결과값(json 다루는 형식), 결과값 형식  
  17. $.get("http://web/test/", { "func""getNameAndTime" },  function(data){    console.log(data.name); // John    console.log(data.time); //  2pm  }, "json");  

 

 

 

 

3. $.getJSON() 방식

 

- 서버에 데이터를 HTTP GET 방식으로 전송한 후 서버측 응답을 JSON 형식으로 받을때 사용 

 

[형식]

jQuery.getJSON( url [, data] [, success(data, textStatus, jqXHR)] )

 

- url : 요청 Url

- data : 요청과 함께 서버에 보내는 string 또는 map

- success(data,textStatus,jqXHR) : 요청이 성공일때 실행되는 callback 함수

 

 

[$.ajax 로 표현]

  1. $.ajax({  
  2.   url: url,  
  3.   dataType: 'json',  
  4.   data: data,  
  5.   success: callback  
  6. });  

 

 

[사용예]

  1. <script>   
  2.     $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",   
  3.     {   
  4.         tags: "mount rainier",   
  5.         tagmode: "any",   
  6.         format: "json"   
  7.       },   
  8.       function(data) {   
  9.         $.each(data.items, function(i,item){   
  10.           $("<img/>").attr("src", item.media.m).appendTo("#images");   
  11.           if ( i == 3 ) return false;   
  12.         });   
  13.     });  
  14.   </script>  

 

 

 

 

4. $.ajax() 방식

 

- 서버에 데이터를 HTTP POST,GET,JSON 모든 방식 전송 가능한 통합적인 함수

- 다양한 Parameter 존재

 

[형식]

jQuery.ajax( url [, settings] ) [ 1.5 이상버젼 ] ,jQuery.ajax( settings ) [ 1.0 이상버젼 ]

 

- url : 요청 Url

- settings : key/value 쌍으로 된 Ajax 요청 Set ( optional )

 

 

[사용예]

  1. // 요청 Url + 추가적 데이터, 완료된 후 리턴 메시지를 받음  
  2. $.ajax({   
  3.       type: "POST",   
  4.       url: "http://web/test/",   
  5.       data: { name: "John", location: "Boston" }   
  6. }).done(function( msg ) {   
  7.       alert( "Data Saved: " + msg );   
  8. });  
  9.   
  10. // 최종 버전 리턴 Html 가져오기  
  11. $.ajax({   
  12.       url: "http://web/test/",   
  13.       cache: false   
  14. }).done(function( html ) {   
  15.       $("#results").append(html);   
  16. });  
  17.   
  18. // 서버에 데이터를 보낸 후 저장처리, 그리고 사용자에게 리턴 완료 메시지 반환  
  19. var menuId = $("ul.nav").first().attr("id");   
  20. var request = $.ajax({   
  21.     url: "http://web/test/",   
  22.     type: "POST",   
  23.     data: {id : menuId},   
  24.     dataType: "html"   
  25. });   
  26.    
  27. request.done(function(msg) {   
  28.     $("#log").html( msg );   
  29. });   
  30.    
  31. request.fail(function(jqXHR, textStatus) {   
  32.     alert( "Request failed: " + textStatus );   
  33. });  
  34.   
  35.   
  36. // 자바 스크립트 로딩 및 실  
  37. $.ajax({   
  38.     type: "GET",   
  39.     url: "test.js",   
  40.     dataType: "script"   
  41. });  

 

 

 

4.1 $.ajaxSetup()

 

- 공통적인 기본 ajax 요청을 미리 설정함

 

[형식]

jQuery.ajaxSetup( options )

 

- optional : default Ajax 요청의 설정값 ( key/value )

 

 

[사용예]

  1. // 미리 ajaxSetup에 기본사항들을 설정한 후 ajax 로 각각 호출  
  2. $.ajaxSetup({  
  3.     url: 'http://web/test/',  
  4.     global: false,   
  5.     type: "POST"   
  6.   
  7. });  
  8. $.ajax({  
  9.       // url not set here; uses 'http://web/test/'  
  10.       data: {'name''Dan'}  
  11. });  
  12. $.ajax({  
  13.       // url not set here; uses 'http://web/test/'  
  14.       data: {'name''John'}  
  15. });  

 

 

 

 

5. $.load() 방식

- 외부 컨텐츠 가져올때 사용

 

[형식]

.load( url [, data] [, complete(responseText, textStatus, XMLHttpRequest)] )

 

- url : 요청 Url

- data : 요청과 함께 서버에 보내는 string 또는 map

- complete(responseText, textStatus, XMLHttpRequest) : 요청이 완료될때 실행되는 callback 함수

 

 

[사용예]

  1. //  Html Content 로딩  
  2. $('#result').load('ajax/test.html');  
  3.   
  4. //  Html Content 로딩 후 메시지  
  5. $('#result').load('ajax/test.html'function() {  
  6.   alert('Load was performed.');  
  7. });  
  8.   
  9. //  Html Content #container Target 로딩  
  10. $('#result').load('ajax/test.html #container');  
  11.   
  12. //  array parameter 전달 후 Html Content 로딩  
  13. $("#objectID").load("test.asp", { 'choices[]': ["Jon""Susan"] } );  


Technical Note/JAVASCRIPT & JQUERY

1. checked 여부 확인

$("input:checkbox[id='ID']").is(":checked") == true : false  /* by ID */

  $("input:checkbox[name='NAME']").is(":checked") == true : false /* by NAME */


2. checked/unchecked 처리

$("input:checkbox[id='ID']").attr("checked", true); /* by ID */

$("input:checkbox[name='NAME']").attr("checked", false); /* by NAME */


3. 특정 라디오버튼 선택 / 모든 라디오버튼 선택해제

$("input:radio[name='NAME']:radio[value='VALUE']").attr("checked",true);

$("input:radio[name='NAME']").removeAttr("checked");





전체선택 체크박스를 선택하면 그 아래의 모든 체크박스를 선택해주는 것을 만들어보자.


<label><input type='checkbox' id='check_all' class='input_check' /> <b>전체선택</b></label>

<ul class='select_subject'>

<label><input type='checkbox' class='input_check' name='class[1]' value='1' /> <b>1</b></label>

<label><input type='checkbox' class='input_check' name='class[2]' value='2' /> <b>2</b></label>

</ul>



 전체선택


이런식으로 html이 있고, javascript 부분은 



$(function(){

    $("#check_all").click(function(){

        var chk = $(this).is(":checked");//.attr('checked');

        if(chk) $(".select_subject input").attr('checked', true);

        else  $(".select_subject input").attr('checked', false);

    });

});



같이 해주면 된다.


1 ··· 8 9 10 11 12 13 14 ··· 27
블로그 이미지

zzikjh