2012-10-29 2 views
6

텍스트 상자와 함께 사용하기 위해 jQuery 플러그인을 만들고 있는데, datepicker와 같은 텍스트 상자를 사용하는 jQueryUI 위젯을 사용하고 싶습니다. 이것은 값이 실제로 설정되기 전에 datepicker의 blur 이벤트가 발생하기 때문에 문제가 발생합니다.jQuery Datepicker 흐림 이벤트에 첨부하기

해결 방법 나는 datepickers 값을 설정할 시간을 허용하기 위해 코드를 실행하기 전에 시간 초과를 설정하는 방법을 사용했습니다. 아래 코드를 참조하십시오 :

$(this).blur(function() { 
    // $(this).val() == "" 
    var elem = $(this); 
    setTimeout(function() { 
     //elem.val() != "" 
    },100); 
}); 

이 해결 방법은 문제에 대한 최선의 해결책이라고 확신하지 못하거나 항상 효과가 있다고 생각합니다. 시간 제한을 100 대신 10 밀리 초로 설정하면 작동하지 않습니다. 어떤 이유로 든 코드 실행 속도가 느리면 걱정이됩니다. 100이면 충분하지 않을 수도 있습니다.

누구든지이 문제에 대한 더 나은 해결책을 생각할 수 있습니까?

답변

6

을 얻을 수있는 날짜 선택기를 ui 인수를 사용할 수 있습니다 수업). 이 문제는 datepicker가 특정 이벤트에 연결된 하나의 기능 만 가질 수 있기 때문에 평상시처럼 이벤트에 바인딩 할 수 없다는 것입니다. 이미 부착 된 함수가있는 경우이 전 검사를 해결하기, 그렇다면 나의 코드 후를 호출하려면이 그것을 할 수있는 쉬운 방법입니다

var elem = $(this); 
var someFunction = function() { 
    //elem.val() != "" 
} 
if (elem.hasClass('hasDatepicker')) { 
    var onClose = elem.datepicker('option','onClose'); 
    elem.datepicker('option','onClose', function() { 
     someFunction(); 
     if (onClose) { onClose(elem.val()); } 
    }); 
} else { 
    elem.bind('blur',someFunction); 
} 
5

는 그 안에 onSelect 또는 onClosethis이 날짜 선택기 선택기 인 입력에 당신이 넥타이를 수 날짜 선택기에서 여러 이벤트가 있습니다. 문제의 텍스트 상자가 hasDatepicker 확인하여 (A 날짜 선택기로 사용하는 경우 내 솔루션은 동적으로 onClose 이벤트에 후크하는 것이었다 결국 값도

$(selector).datepicker({ 
    onClose:function(evt, ui){    
      $(this).myPlugin('someMethod'); 
    }) 
}) 
+0

$ () .datepicker ('option', 'onSelect', function() {...}); – JakeRobb

0

". datepickerSelect을"

$('#element').datepicker({ 
    onClose: function() { 
     $(this).trigger('change'); 
    } 
}); 


$('#element').bind('change',function(){ 
    // someFunction(); 
});