jQuery UI 변경 이벤트 문제에 대한 날짜 선택기
JS 코드가 있는데, 필드를 변경하면 검색 루틴이라고 합니다.문제는 날짜 선택기가 입력 필드를 업데이트할 때 실행될 jQuery 이벤트를 찾을 수 없다는 것입니다.
어떤 이유에서인지 날짜 선택기가 필드를 업데이트할 때 변경 이벤트가 호출되지 않습니다.달력이 뜨면 포커스가 바뀌어서 저도 사용할 수가 없어요.아이디어 있어요?
당신은 데이트 상대의 이벤트를 이용할 수 있습니다.
$(".date").datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
}
});
실시간 예제:
$(".date")
.datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
}
})
.on("change", function() {
console.log("Got change event from field");
});
<link href="https://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
불행하게도,onSelect
날짜가 변경되지 않았더라도 날짜가 선택될 때마다 실행됩니다.이는 날짜 선택기의 설계 결함입니다.항상 불이 붙습니다.onSelect
(아무 것도 변경되지 않은 경우에도) 변경 시 기본 입력에 대해 이벤트를 발생시키지 않습니다.(이 예제의 코드를 보면, 우리는 변경 사항을 듣고 있지만 변경 사항은 제기되지 않고 있습니다.)상황이 바뀔 때 입력에서 이벤트를 발생시켜야 합니다(아마도 일반적일 것입니다).change
이벤트(또는 날짜 선택기별 이벤트일 수 있음).
당신이 원한다면, 물론, 당신은 만들 수 있습니다.change
에 관한 행사input
화재:
$(".date").datepicker({
onSelect: function() {
$(this).change();
}
});
그것은 불이 날 것입니다.change
근저에input
jQuery를 통해 연결된 모든 핸들러에 대해 설명합니다.하지만 다시, 그것은 항상 그것을 발사합니다.실제 변경 사항에 대해서만 실행하려면 이전 값을 저장해야 합니다.data
) 및 비교합니다.
실시간 예제:
$(".date")
.datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
$(this).change();
}
})
.on("change", function() {
console.log("Got change event from field");
});
<link href="https://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
T.J. Crowder의 대답(https://stackoverflow.com/a/6471992/481154) 은 매우 훌륭하고 여전히 정확합니다.onSelect 기능 내에서 변경 이벤트를 트리거하는 것이 가능한 한 가깝습니다.
그러나 datepicker 객체에 좋은 속성이 있습니다(lastVal
값을 직접 저장할 필요 없이 실제 변경 시에만 조건부로 변경 이벤트를 트리거할 수 있습니다.
$('#dateInput').datepicker({
onSelect: function(d,i){
if(d !== i.lastVal){
$(this).change();
}
}
});
그런 다음 일반적인 변경 이벤트를 처리합니다.
$('#dateInput').change(function(){
//Change code!
});
날짜 선택기 개체에서 onSelect 이벤트를 찾고 있습니다.
$('.selector').datepicker({
onSelect: function(dateText, inst) { ... }
});
$('#inputfield').change(function() {
dosomething();
});
날짜가 바뀌어야만 이벤트를 유발할 수 있는 해결책이 필요해서 이렇게 썼습니다.
이것은 간단한 해결책입니다.대화 상자가 닫힐 때마다 데이터가 변경되었는지 테스트합니다.이 경우 사용자 지정 이벤트를 트리거하고 저장된 값을 재설정합니다.
$('.datetime').datepicker({
onClose: function(dateText,datePickerInstance) {
var oldValue = $(this).data('oldValue') || "";
if (dateText !== oldValue) {
$(this).data('oldValue',dateText);
$(this).trigger('dateupdated');
}
}
});
이제 해당 사용자 지정 이벤트에 대한 처리기를 연결할 수 있습니다.
$('body').on('dateupdated','.datetime', function(e) {
// do something
});
저는 부트스트랩 날짜 선택기를 사용하고 있는데 위의 솔루션은 저에게 적합하지 않습니다.이 대답은 나에게 도움이 되었습니다.
수동으로 날짜를 편집하거나 날짜를 지울 때 부트스트랩 날짜 선택기 날짜 변경 이벤트가 발생하지 않음
제가 지원한 것은 다음과 같습니다.
$('.date-picker').datepicker({
endDate: new Date(),
autoclose: true,
}).on('changeDate', function(ev){
//my work here
});
이것이 다른 사람들에게 도움이 되기를 바랍니다.
이것이 오래된 질문이라는 것을 압니다.하지만 저는 $(이것)에 대한 jquery를 받지 못했습니다.Change() 이벤트를 Select(선택)에서 올바르게 실행합니다.그래서 저는 바닐라 js를 통해 변경 이벤트를 시작하기 위해 다음과 같은 접근법을 사용했습니다.
$('.date').datepicker({
showOn: 'focus',
dateFormat: 'mm-dd-yy',
changeMonth: true,
changeYear: true,
onSelect: function() {
var event;
if(typeof window.Event == "function"){
event = new Event('change');
this.dispatchEvent(event);
} else {
event = document.createEvent('HTMLEvents');
event.initEvent('change', false, false);
this.dispatchEvent(event);
}
}
});
시도:
$('#idPicker').on('changeDate', function() {
var date = $('#idPicker').datepicker('getFormattedDate');
});
jQueryUi 1.9에서는 추가 데이터 값과 beforeShow 및 onSelect 기능의 조합을 통해 작동할 수 있었습니다.
$( ".datepicker" ).datepicker({
beforeShow: function( el ){
// set the current value before showing the widget
$(this).data('previous', $(el).val() );
},
onSelect: function( newText ){
// compare the new value to the previous one
if( $(this).data('previous') != newText ){
// do whatever has to be done, e.g. log it to console
console.log( 'changed to: ' + newText );
}
}
});
나에게 효과가 있습니다 :)
사용해 보세요.
$('#dateInput').datepicker({
onSelect: function(){
$(this).trigger('change');
}
}});
이것이 도움이 되길 바랍니다:)
설명서에 표시된 내용:
apply.daterangepicker: Triggered when the apply button is clicked, or when a predefined range is clicked
그래서:
$('#daterange').daterangepicker({
locale: { cancelLabel: 'Clear' }
});
$('#daterange').on('apply.daterangepicker', function() {
alert('worked!');
});
나한테 효과가 있어요.
나의 해결책:
var $dateInput = $('#dateInput');
$dateInput.datepicker({
onSelect: function(f,d,i){
if(d !== i.lastVal){
$dateInput.trigger("change");
}
}
}).data('datepicker');
$dateInput.on("change", function () {
//your code
});
제 생각에 당신의 문제는 당신의 데이트 선택기가 어떻게 설정되어 있는지에 있을 것 같습니다.입력을 끊는 게 어때요?altField를 사용하지 않습니다.대신 onSelect가 실행될 때 값을 명시적으로 설정합니다.이렇게 하면 사용자 텍스트 필드 및 날짜 선택기와 같은 각 상호 작용을 제어할 수 있습니다.
참고: 때때로 Select()가 아닌 .change()의 루틴을 호출해야 합니다. Select()의 경우 예상치 못한 다양한 상호 작용에 대해 호출될 수 있기 때문입니다.
유사 코드:
$('#date').datepicker({
//altField: , //do not use
onSelect: function(date){
$('#date').val(date); //Set my textbox value
//Do your search routine
},
}).change(function(){
//Or do it here...
});
$('#date').change(function(){
var thisDate = $(this).val();
if(isValidDate(thisDate)){
$('#date').datepicker('setDate', thisDate); //Set my datepicker value
//Do your search routine
});
});
DatePicker가 선택한 값 변경 이벤트 코드는 다음과 같습니다.
/* HTML Part */
<p>Date: <input type="text" id="datepicker"></p>
/* jQuery Part */
$("#datepicker").change(function() {
selectedDate= $('#datepicker').datepicker({ dateFormat: 'yy-mm-dd' }).val();
alert(selectedDate);
});
만약 당신이 wdcalendar를 사용하고 있다면 이것은 당신에게 도움이 될 것입니다.
$("#PatientBirthday").datepicker({
picker: "<button class='calpick'></button>",
onReturn:function(d){
var today = new Date();
var birthDate = d;
var age = today.getFullYear() - birthDate.getFullYear();
var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
$('#ageshow')[0].innerHTML="Age: "+age;
$("#PatientBirthday").val((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear());
}
});
리턴에 대한 이벤트는 나에게 효과가 있습니다.
이것이 도움이 되길 바랍니다.
내 솔루션은 다음과(와)
events: {
'apply.daterangepicker #selector': 'function'
}
여러분들 중 몇몇은 아마 어떤 것을 사용하고 있을 것입니다.XDSoft DateTimePicker
https://xdsoft.net/jqplugins//https://xdsoft.net/jqplugins/datetimepicker/
거기서, 변화 이벤트는
onSelectDate: function(){
alert('change date event);
}
날짜 선택 시 https://xdsoft.net/jqplugins/datetimepicker/ #
당신은 할 수 .onClose
션옵에 대한 datepicker
그리고 당신의 변경 코드를 안에 넣습니다.이것은 다음과 같은 경우에 트리거됩니다.datepicker
모달이 닫혔습니다.변경 이벤트를 트리거하려고 했지만 작동하지 않아 코드를 내부에 넣었습니다.onClose
대신에 효과가 있습니다.에 대해서도 마찬가지일 수 있습니다.onSelect
날짜를 선택할 때 트리거해야 하는 경우 언급된 항목입니다.
$('#el').datepicker({
onClose: function () {
// code here
}
});
날짜 선택 옵션 https://api.jqueryui.com/datepicker/
이 접근 방식은 간단하며 텍스트 상자 제어와 함께 항상 작동합니다. $('#controlID').on('changeDate', function() { $(this).change(); });
언급URL : https://stackoverflow.com/questions/6471959/jquery-ui-datepicker-onchange-event-issue
'programing' 카테고리의 다른 글
스크롤 뷰어 마우스 휠이 스크롤되지 않음 (0) | 2023.05.22 |
---|---|
인증서 확인 실패: 로컬 발급자 인증서를 가져올 수 없습니다. (0) | 2023.05.22 |
'array_keys()'를 호출하지 않고 array_map()로 1단계 키 액세스 (0) | 2023.05.22 |
PostgreSQL에서 CHARCHAR와 CHARCHAR의 차이점은 무엇입니까? (0) | 2023.05.22 |
사용자 지정 HTTP 상태 코드를 만들 수 있습니까? (0) | 2023.05.22 |