2012-04-17 4 views
1

배경 : 거의 모든 내 웹 페이지에서 사용되는 jQuery 유효성 검사 스크립트가있어 클라이언트 쪽 유효성 검사 (서버 측 유효성 검사도 수행 할 수 있음)가 가능합니다. javascript는 각 양식에 대한 특정 '규칙'을 제외하고 모든 내 페이지에서 동일합니다.스크립트에 동적 javascript 변수를 추가하십시오.

HTML 페이지를 렌더링하기 전에 각 페이지에 대한 규칙이 내 컨트롤러에서 PHP 변수 $ jquery_validation에 삽입됩니다. 이는 적절한 클라이언트 측 유효성 검사 규칙을 사용하여 각 html 페이지 & 양식을 동적으로 생성 할 수 있음을 의미합니다.

$(document).ready(function(){ 
     $('#signupform').validate({ 
      wrapper: 'span class="error"', 
      meta: 'validate', 
      highlight: function(element, errorClass, validClass) { 
       if (element.type === 'radio') { 
         this.findByName(element.name).addClass(errorClass).removeClass(validClass); 
       } else { 
         $(element).addClass(errorClass).removeClass(validClass); 
       } 

       var error = $(element).parent().find('span.error');  
       error.show();  
      }, 

      unhighlight: function(element, errorClass, validClass) { 
       if (element.type === 'radio') { 
       this.findByName(element.name).removeClass(errorClass).addClass(validClass); 
       } else { 
       $(element).removeClass(errorClass).addClass(validClass); 
       } 

       $(element).parent().find('span.error').hide(0, function() { 
       $(element).parent().find('span.valid').fadeIn(200); 
       }); 
      }, 
      <?=$jquery_validation?>);}); 

</script> 

끝에 $ jquery_validation 변수 형태에 따라 분명히 차이가 각 페이지의 "규칙"을 포함 : 아래

현재 내 모든 HTML 페이지에로드 내 자바 스크립트 코드 . 출력의 예는 다음과 같습니다.

"rules":{"username":{"required":true,"remote":{"url":"http:\/\/localhost\/mytest\/public_html\/welcome\/remote","type":"post"}},"onkeyup":false});}); 

이 기능은 현재 작동하며 모두 훌륭합니다.

질문 : (그래서이 등을 압축 할 수 있습니다) 내의 .js 파일에 자바 스크립트 함수 내 검증이 할 수있는 방법이 있나요 - 여전히 동적으로 각 페이지에 대한 검증의 "규칙"섹션을로드는? 필요한 경우

나는 '출력'은 $ jquery_validation의 & 구문을 변경할 수 있습니다 -하지만 요점은 내가 동적으로

+0

  • 로드 유효성 검사 논리를 (이 브라우저 캐시에 남아있을 것입니다 때문에, 성능이 올바른 HTTP 캐싱 설정을 imptove하는) 당신 PHP 파일을 만들고 헤더를 사용하여 "This is a Javascript"라고 말할 수 있습니다. 이 aproach를 사용하여 유효성 검증 값을 데이터베이스에 저장할 수도 있습니다. – chepe263

  • 답변

    1

    예, 개체를 만들어 변수에 저장하고 생성자에서 세부 정보를 저장할 수 있습니다 (JS에서 호출 된 내용을 기억할 수 없음).

    내 스크립트 중 하나에서 사용하는 예입니다.

    당신이 원하는대로 어디서나 그것을 인스턴스화하고 필요한 세부 사항을 전달할 수 있습니다. 프로토 타입 객체에

    var rmlsHandle = rmlsSearch("some endpoint I'm planning on using"); 
    

    검색 에이전트 기능 :

    rmlsSearch.prototype.searchAgent = function(){ 
    
        //Get the agent details from the form on the page 
        this.getAgentDetails(); 
    
        //... Whatever else you'd need to do in the function 
    }; 
    
    +0

    Hmmm ... 내가 이해할 것 같아요. - .js 파일에서 정적 JS 함수를 만들어 변수를 받아 들인 다음 JSTL 함수에서 JSTL 함수를 호출하여 규칙을 전달합니다. 흥미 롭습니다 ... 지금 살펴 보겠습니다 ... – Laurence

    +0

    그래, 구성 바를 전달해야하는 JS 블록을 재사용하는 것이 가장 간단하고 깨끗한 방법입니다. 내가 그 부분을 분명히 할 수 있다면 알려주지. – Steven

    1

    당신은 어떤 .js 파일에 자바 스크립트 코드를 넣을 수 있습니다 각 페이지에 대한 규칙 출력 할 수 있어야입니다 압축되어 HTML 페이지의 데이터에서 작동 할 수 있습니다. 두 파일은 같은 파일에 있지 않습니다. 코드가로드 될 때 코드가 실행되면 코드가 페이지에 정의 된 후에 물리적으로 코드를 찾거나 페이지를로드하기 전에 페이지가로드 될 때까지 기다리는 방식으로 코드가 페이지에서 정의 된 후에 코드가 처음 실행되는지 확인하면됩니다. 암호.

    +0

    감사합니다 jfriend00 -하지만 어떻게 실제로합니까? html 페이지의 데이터에서 작동하도록 js 코드를 얻으려면 어떻게해야합니까? – Laurence

    +0

    함수에서 규칙을 이동하고 유효성 검사 함수에서 참조 할 수있는 전역 변수로 이동합니다. 그런 다음 유효성 검사 기능이 압축 JS에있을 수 있습니다. – jfriend00

    1

    PHP는 동적 컨텐츠를 실행하기 위해 상기 브라우저에 의해 표현 될 필요가있다. 따라서 PHP를 외부 js 파일에 넣으려는 시도는 읽히지 않습니다.

    +0

    예 - thats 내 요점 - 어떻게 할 수있는 최선의 두 세계 (자바 파일 내 .js 파일, 여전히 변수를 HTML 파일에서로드하는 동안) – Laurence

    2

    아니면 이런 식으로 뭔가를해야만 할 수는 :

    var _pageValidationRules = <?php echo $jquery_validation; ?> 
    
    // Code below can be compressed 
    $(function() { 
        $('#signupform').validate({ 
         wrapper: 'span class="error"', 
         meta: 'validate', 
         highlight: function(element, errorClass, validClass) { 
          // ... 
         }, 
         unhighlight: function(element, errorClass, validClass) { 
          // ... 
         } 
         rules: _pageValidationRules 
        }); 
    });​ 
    
    +0

    HTML 파일 크기를 줄이기 위해 외부 파일에 유효성 검사 규칙을 이동합니다 –

    +0

    알았어 - 그래서 명확하게 - 귀하의 말은 '내 Java 코드를 압축하지만, 그것을 내 HTML 파일에두고보다는 오히려. js 파일에 별도로 가지고보다? – Laurence

    +0

    코드를 html로 남겨 두거나 별도의 js 파일로 이동할 수 있습니다. 그건 중요하지 않아. 유효성 검사 플러그인이 초기화 될 때 규칙을 사용할 수 있도록 전역 컨텍스트에서 사용할 수있는'_pageValidationRules' 변수가 있는지 확인하십시오. – dfsq

    1
    • 는 JSON 형식으로 유효성 검사 규칙을 반환하는 PHP 스크립트를 작성합니다.스크립트 태그를 사용하여 해당 스크립트, 그것은 PHP 파일이 될 수
    • 로드는 정적 파일을 외부 JS에서
    +0

    감사합니다. Maksym - 내가하고 싶은 것입니다.하지만 어떻게 실제로 그렇게합니까? 즉, 내 논리를 JS Static 파일에 저장하는 방법을 알고 있지만 HTML 파일에서 실제로 동적으로 규칙을로드하는 방법을 그 함수에 알려주는 방법은 무엇입니까? – Laurence

    +0

    외부 JavaScript 파일을로드하여 jQuery의 getScript 메소드 (http://api.jquery.com/jQuery.getScript/)를 사용하여 동적으로 실행할 수 있습니다. –

    관련 문제