2014-12-16 16 views
11

Tôi có datepickerjquery datepicker sự kiện thay đổi kích hoạt và thay đổi mặc định đầu vào của sự kiện

<input type='text' class='inp'> 
<script> 
    $('.inp').datepicker(); 

    $(".inp").on("change",function(){ 
    console.log('inp changed'); 
    }); 
</script> 

Khi lần đầu tiên tôi thay đổi '.inp' bằng tay gõ có một giá trị, sau đó ngay lập tức tôi bấm vào datepicker ấy mở lịch. Tôi nhận được hai người nghe sự kiện 'thay đổi'. Đầu tiên từ thay đổi thủ công, sau đó từ thay đổi datepicker. Làm cách nào để tránh điều này?

+0

Không liên quan: thẻ đóng của bạn là sai, nó nên là ' '. –

Trả lời

11

Đặt đầu vào của bạn readOnly, nó sẽ giúp bạn thay đổi giá trị của trường thông qua chỉ biểu tượng.

<input type='text' class='inp' readOnly /> 

sau đó sử dụng onSelect để có được ngày đã chọn, như sau:

$(function() { 
    $(".inp").datepicker({ 
     onSelect: function(dateText, inst) { 
      // alert(dateText); 
     } 
    }); 
}); 
+0

thuộc tính thiết lập 'readOnly' có thể vô hiệu xác thực (nếu có) cho trường này. Theo tôi, giải pháp tốt nhất là thiết lập attr 'onkeydown =" false "' –

6

Hãy thử sử dụng các chức năng onSelect như:

$(function() { 
    $(".datepicker").datepicker({ 
     onSelect: function() { 
     //your code here 
    }}); 

này sẽ được kích hoạt khi họ chọn một ngày từ lịch không phải khi họ đang gõ.

0

Nếu bạn đang sử dụng bootstrap datepicker bạn có thể làm như sau:

$('.datepicker').datepicker() 
    .on('changeDate', function(e){ 
     # `e` here contains the extra attributes 
}); 

Để biết thêm chi tiết xem: Bootstrap Datepicker events

0

Cảm ơn! Mọi người, nhưng tôi không thể làm cho một người chỉ đọc một trường, đây là yêu cầu. Vì vậy, tôi phải tự nghiên cứu. Vì vậy, tôi đăng giải pháp cuối cùng của mình. Tôi đã liên kết với 150 ms, sau đó liên kết lại. I made a jquery plugin for this

function myfunc(that){ 
     $(that).one('change', function(){ 
       var that = this; 
       setTimeout(function(){myfunc(that);}, 150); 
       //some logic 
      } 
     ) 
} 

myfunc(".inp"); 
-1

nếu bạn đang sử dụng bảng chọn ngày jquery không cần lửa sự kiện lịch. bạn có thể kích hoạt sự kiện trên hộp văn bản "văn bản"

+0

nếu bạn đang sử dụng hộp văn bản trong lịch thì bạn cau sử dụng phương pháp trên. –

2

Bạn có thể bật onSelect kích hoạt sự kiện thay đổi trên trường văn bản. Bằng cách này, chỉnh sửa ngày qua hộp văn bản hoặc thông qua bộ chọn ngày hoạt động giống nhau.

$('.inp').datepicker({ 
    onSelect: function() { 
    return $(this).trigger('change'); 
    } 
); 

$(".inp").on("change",function(){ 
    console.log('inp changed'); 
} 
0

Cảm ơn bạn tất cả mọi người, đây là những gì tôi đã sử dụng mặc dù,

function myfunction(x,x2){ 
    var date1 = new Date(x); 
    var MyDateString; 
    MyDateString = date1.getFullYear()+ '/' + ('0' + (date1.getMonth()+1)).slice(-2) + '/' + ('0' + date1.getDate()).slice(-2); 
    x2.value= MyDateString;  
} 

x, là giá trị datepicker và x2 là đối tượng datepicker

Các vấn đề liên quan