2011-09-15 2 views
3

오류 메시지를 html 요소에 대한 하이퍼 링크로 표시하려면 jquery.validate.unobtrusive.js에서 onErrors 메서드를 재정의하고 싶습니다. 그러나 jquery.validate.unobtrusive.js에서 메소드를 변경하고 싶지는 않습니다. 최신 버전이 출시되면이 파일이 업데이트되기 때문입니다. 외부 JS 파일을 만들고 거기에 onErrors 함수를 포함시킬 수 있다는 것을 읽었습니다. 내 html 파일에서 jquery.validate.unobtrusive.js를 포함시킨 후 외부 JS 파일을 포함하면 jquery.validate.unobtrusive.js의 메소드가 자동으로 대체됩니다. 이것은 일어나지 않습니다.jquery.validate.unobtrusive.min.js를 수정하지 않고 JQuery 눈에 거슬리지 방법을 재정의하는 방법?

jquery.validate.unobtrusive.min.js를 사용하고 함수의 이름이 onErrors에서 k로 바뀌 었음에 유의하십시오. 내 외부 JS 파일에서 'k'라는 함수를 만들려고했는데 그런 행운은 없었습니다.

감사합니다.

+0

당신은 당신이 가능 읽은 곳으로 링크를 게시 할 수 :

은 당신의 파일 중 하나에이 코드를 넣어? 축소 된 파일을 살펴본 결과이 작업에 어려움을 겪고 있다고 생각합니다. –

+0

예, 코드를 게시하고 시도한 내용을 알려주십시오. –

답변

0

두 함수가 전역 이름 공간에 배치 될 때 대체가 발생할 수 있습니다. jquery.validation.unobtrusive.js의 경우 onErrors 함수는 다른 함수 내부에서 선언되며 같은 이름을 가진 다른 함수를 선언하여 대체 할 수 없습니다.

소스 코드를 변경하지 않고 해당 기능을 변경할 수있는 방법이없는 것처럼 보입니다.

7

원본 jquery.validate.unobtrusive.js를 수정할 필요가 없습니다. 대답은 다음과 같습니다 : How can I customize the unobtrusive validation in ASP.NET MVC 3 to match my style?

하지만주의해야합니다. 오류가있는 경우에도 양식을 제출하면 errorPlacement를 변경하면됩니다. jquery.validate.unobtrusive.js의 onError 함수의 내용을 유지해야하는 것을 피하려면

var $form = $("form.edit-form") 
    var validator = $form.data('validator'); 

validator.settings.errorPlacement = $.proxy(onError, $form); 

function onError(error, inputElement) { 
    //Original code of the onError function inside jquery.validate.unobtrusive 
    //------------------------------------------------------------------------ 
    var container = $(this).find("[data-valmsg-for='" + inputElement[0].name + "']"), 
     replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false; 

    container.removeClass("field-validation-valid").addClass("field-validation-error"); 
    error.data("unobtrusiveContainer", container); 

    if (replace) { 
     container.empty(); 
     error.removeClass("input-validation-error"); 
    } 
    else { 
     error.hide(); 
    } 

    //END of Original code of the onError function inside jquery.validate.unobtrusive 
    //------------------------------------------------------------------------------- 

    //Do whatever you want here, in my case I'm using qTip to show the errors 
    var element = inputElement; 
    // Set positioning based on the elements position in the form 
    var elem = $(element); 

    // Check we have a valid error message 
    if (!error.is(':empty')) { 
     // Apply the tooltip only if it isn't valid 
     elem.filter(':not(.valid)').qtip({ 
      overwrite: false, 
      content: error, 
      position: { 
       my: 'left middle', 
       at: 'right middle', 
       viewport: $(window) 
      }, 
      show: { 
       event: false, 
       ready: true 
      }, 
      hide: false, 
      style: { 
       classes: 'ui-tooltip-red' // Make it red... the classic error colour! 
      } 
     }) 

     // If we have a tooltip on this element already, just update its content 
     .qtip('option', 'content.text', error); 
    } 

     // If the error is empty, remove the qTip 
    else { elem.qtip('destroy'); } 
} 
관련 문제