2012-09-07 21 views
7

Tôi đang gặp phải sự cố nhỏ với trình ghim date UI của jQuery. Có điều là, tôi có trang web của tôi và một số đầu vào như thế này:datepicker áp dụng cho trường sai

blabla | blabla | .date-picker | blabla 
blabla2 | blabla2 | .date-picker | blabla2 
blabla3 | blabla3 | .date-picker | blabla3 

Vì vậy, các 'blabla' chỉ là một số văn bản, và '.date-picker' là một đầu vào, với 'chọn ngày ' lớp học.

Trong mã Javascript của tôi, tôi chỉ có điều sau đây:

$(function() { 
    $('.date-picker').datepicker(); 
}); 

Nhưng ví dụ, nếu tôi bấm vào đầu vào của dòng "blabla3", thay vì cập nhật đầu vào đúng, nó luôn luôn cập nhật đầu tiên một ...

Đầu vào của tôi có tất cả cùng một id (tôi không thể thay đổi), nhưng tôi đang sử dụng lớp đầu vào cho công cụ chọn của mình, vì vậy nó sẽ hoạt động nhưng không hoạt động.

+0

xung đột id giống nhau! – AlphaMale

+0

Việc có nhiều thành phần với cùng một ID không hợp lệ và chúng tôi không thể kiểm soát hành vi của bất kỳ điều gì nếu bạn chọn thực hiện điều này. – sevenseacat

Trả lời

2

Bạn nên thay đổi id của các yếu tố đầu vào, nếu không, nó sẽ không hoạt động, bởi vì, khi bạn chọn bất kỳ ngày nào, nó sử dụng DP_jQuery_1347006322116.datepicker._selectDay('#same',8,2012, this);return false; chức năng này để chọnThanh toán và đang lấy id cho đầu vào.

vì vậy nếu bạn có nhiều id, nó sẽ chọn đầu vào đầu tiên và đặt ngày ở đó.

+0

Cảm ơn lời giải thích rõ ràng này! Có thực sự không có khả năng để làm điều đó mà không thay đổi id? Bởi vì mã PHP phía sau biểu mẫu sẽ phải thay đổi hoàn toàn nếu tôi thay đổi id của đầu vào của tôi ... Trước khi trên trang của tôi, tôi đã sử dụng datepicker để chọn chỉ năm và tháng, với mã này: http: // pastebin. com/rnDSKnvp Và nó hoạt động rất tốt. Có giải pháp nào để thêm ngày trong mã ở trên không? – user1506157

2

Tôi đã gặp phải sự cố tương tự trong đó tôi sẽ sử dụng javascript để tự động thêm các vùng chứa DIV mới chứa các trường ngày có cùng thẻ ID. Phương pháp duy nhất để giải quyết trong trường hợp của tôi là tự động viết lại tất cả các ID sau đó hủy/tạo chức năng datepicker:

var n=0;  
$("[id*='blabla']").each(function(){ 
    n++; 
    tempField = this.id.split("-"); 
    this.id = tempField[0]+"-"+n; 
    }); 

// first remove datepicker functionality since renaming of id above then    
// add datepicker to any field with "datepicker" as class 

    $("input.datepicker").datepicker("destroy").datepicker(); 

Tôi đã sửa đổi ở trên để phù hợp với trường hợp sử dụng của bạn (tôi nghĩ). Hi vọng điêu nay co ich.

BTW: Lý do tôi chia tách bằng dấu nối ("-") là vì sau đó tôi có thể gọi hàm này mỗi lần tôi tự động tạo vùng chứa DIV khác với trường ngày tháng. Nó sẽ có hệ thống đổi tên tất cả các ID theo thứ tự tuần tự để xử lý biểu mẫu sau này.

+0

người đàn ông tôi gần như muốn downvote rằng một do bản chất hack-cốt lõi của nó, và mã xấu xí .. lol. Tôi nghĩ rằng có một cách tốt hơn cho chắc chắn, và sẽ không được hạnh phúc với việc thực hiện này – blamb

4

Xin chào bài cũ nhưng nó cho những ai vẫn đang phải đối mặt vấn đề này ...

Chỉ cần loại bỏ các id của đầu vào mới, datepicker luôn tạo ra một id mới Ví dụ: nếu đầu vào không có một. Nếu nó có một trong những datepicker sẽ giữ điều đó, có nghĩa là ở đây đầu vào đầu tiên được nhân bản và cuối cùng cũng sẽ được cập nhật.

+2

Đưa ra một mã số làm việc, nó sẽ dễ dàng hơn. –

+0

Thử nghiệm và điều này là chính xác, một khi tôi loại bỏ trường ID một duy nhất được tạo ra bởi bộ chọn ngày, cảm ơn bạn !! – sMyles

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