2014-02-25 4 views
0

스크립트를 사용하여 날짜를 확인할 때까지 활성화 된 jQuery DatePicker (활성 날짜 피커 = 해당 텍스트 상자 또는 오픈 캘린더)의 다른 컨트롤에 대한 입력을 차단하고 싶습니다.jQuery DatePicker가 다른 컨트롤에 입력하지 못하도록합니다.

필드 밖으로 나올 때 잘 동작하는 흐림을 방지하여이 작업을 시도했습니다. 그러나 예를 들어 사용자가 체크 상자를 클릭하면 DatePicker 텍스트 상자에서 blur 이벤트가 발생하기 전에이 체크 박스가 선택/선택 해제됩니다. 내가 다른 컨트롤 동안의 입력을 방지 할 수있는 방법

$('#myCalendar').blur(function(){ 
    return Page_ClientValidate('myValidationGroup'); 
}); 

:

는 asp.net 유효성 검사기 (유효 날짜에 대한 사용자 지정 유효성 검사기와 DATERANGE를 테스트하는 사용자 정의 유효성 검사기)와 함께, 내 원래 계획이었다 다른 컨트롤에 체크하지 않고 선택한/입력 한 날짜가 잘못되었습니다. 다른 모든 컨트롤을 비활성화하지 않는 것이 좋습니다.

업데이트 : 경고는 다른 컨트롤에서 이벤트를 취소하는 것으로 보입니다. 왜 그런가, 왜 내가 경고를 필요로하지 않는 방식으로 이것을 활용할 수 있을까?

+0

'blur' 이벤트는'click' 이벤트보다 먼저 발생한다고 생각합니다. 제발 jsfiddle보세요 : http://jsfiddle.net/bSfT2/ –

+0

@ 모토, 당신 말이 맞아. 그러나 Page_ClientValidate가 false를 반환하면 내 체크 박스의 상태가 여전히 변경되는 이유는 무엇입니까? –

답변

0

이것은 내가 지금, a.t.m. 그것을 suffient을 자신을 얻을 수있는 좋은입니다 : IE의 체크 박스에

$(document).ready(function() { 
    $("input.DatePicker:text").on("blur.MyNamespace", function() { return dp_FireValidators(this, null); }); 
}); 

var rewriteHandlers = 'click.MyNamespace, dblclick.MyNamespace, change.MyNamespace, focusin.MyNamespace, keydown.MyNamespace, keypress.MyNamespace, mousedown.MyNamespace'; 
function dp_FireValidators(sender, args) { 
    $(sender).removeClass('CalenderInvalidDate'); 

    if (sender.Validators.length > 0) { 
     var vGroup = sender.Validators[0].validationGroup; 

     if (vGroup == undefined) 
      Page_ClientValidate(); 
     else 
      Page_ClientValidate(vGroup); 

     for (var i = 0; i < sender.Validators.length; i++) { 
      if (!sender.Validators[i].isvalid) { 
       dp_PreventChangesWhileDateIncorrect(); 
       $(sender).addClass('CalenderInvalidDate'); 
       $(sender).focus(); 
       return false; 
      } 
     } 
    } 

    $("input:checkbox, select").off(rewriteHandlers); 

    return true; 
} 

function dp_PreventChangesWhileDateIncorrect() { 
    $("input:checkbox, select").on(rewriteHandlers, function (e) { 
     e.preventDefault(); 
     return false; 
    }); 
} 

만 dblclick 통해 미끄러됩니다.

0

Internet Explorer에서 blur 이벤트가 끊어지지 않습니다. 따라서 blur 이벤트와 함께 이벤트 위임에 의존하는 스크립트는 브라우저에서 일관되게 작동하지 않습니다. 그러나 버전 1.4.2에서 jQuery는 이벤트 위임 메소드 인 .live() 및 .delegate()에서 포커스를 이벤트로 매핑하여이 제한을 해결합니다.

이것은 jquery api documentation입니다.

맞춤 클라이언트 측 검사기를 사용해 보셨습니까?

이 코드는 Google의 글로벌 core.js 파일에 저장됩니다.

function dateValidator(source, arguments) { 
    var d = new Date(arguments.Value); 
    return arguments.IsValid = !isNaN(d.valueOf()); 
} 

그런 다음 스크립트를 호출하는 사용자 정의 검사기를 사용하십시오.

<asp:CustomValidator ID="cvInstallationDate" runat="server" Display="Dynamic" ErrorMessage="Invalid Installation Date." 
          ControlToValidate ="txtInstallationDate" EnableClientScript="true" ClientValidationFunction ="dateValidator"> 
          <img src='/Images/WarningIcon.png' width='16' height='16' title='Invalid Installation Date' /> 
</asp:CustomValidator> 
+0

사용자 정의 유효성 검사기를 사용하고 있지만 사용자가 자동 ​​제어 기능을 켤 수있는 다른 컨트롤을 클릭 할 수 있습니다. –

관련 문제