2009-04-11 16 views

Odpowiedz

9

$ (". Ui-datepicker"). Draggable() nie działa?

+0

Rzeczywiście robi. Jestem oczywiście nowy w jQuery UI, więc dziękuję za pomoc na noobish pytanie. –

+0

nie ma problemu :) aby wiedzieć, jakie klasy i czy elementy zostały załadowane przez javascript, zainstaluj Firebuga. – zalew

+0

Uwierz mi, Firebug jest moim przyjacielem. Po prostu nie wiedziałem, czy możliwe jest nawet przeciągnięcie datepaktera. –

6

Kolejność jest ważna.

$('#myCalendarInput').datepicker(); 
$('#ui-datepicker-div').draggable(); 

EDIT: Istnieje subtelna różnica pomiędzy dostawami odpowiedź @JZ i kopalni. Przy użyciu przykładu JZ każdy datepicker na stronie będzie przeciągalny, nawet te, które są wbudowane (powiązane z DIV zamiast elementu wejściowego). Mój kod spowoduje, że podręczne datepickery będą przeciągane. Wtyczka datepicker tworzy pojedynczy DIV (nazwany ui-datepicker-div) dla wszystkich wyskakujących okienek i używa go ponownie dla dowolnego wejścia na stronie, do której został zastosowany datepicker. W przypadku wbudowanych DIV lub SPAN tworzy nowy, nienazwany datepicker wewnątrz DIV/SPAN, który ma klasę .ui-datepicker, ale nie ma nazwy. W tym przypadku mój kod nie spowoduje, że datepicker będzie można przeciągnąć, prawdopodobnie prawidłowe zachowanie, ale JZs będzie, ponieważ będzie dopasowywał się w oparciu o klasę.

Przykład:

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#calendar').datepicker(); 
    $('#calendar2').datepicker(); 
    $('#calendar3').datepicker(); 
    $('#ui-datepicker-div').draggable(); 
}); 
</script> 

<div> 
Calendar: <input id="calendar" type="text" /><br /> <-- draggable 
Calendar2: <input id="calendar2" type="text" /><br/> <-- draggable 
Fixed calendar: <div id="calendar3"></div> <-- fixed 
</div> 
+0

Nie próbowałem tego, ponieważ odpowiedź JZ działała, ale czy nie napotkasz problemu z wieloma datepickerami na tej samej stronie z tym rozwiązaniem? –

+0

Jest jedna różnica między moim kodem a JZ. Dla elementu wejściowego datepicker utworzy tylko jeden ui-datepicker-div i użyje go ponownie dla wszystkich wejść wymagających popup. Jeśli użyjesz wbudowanego kalendarza, kod JZ sprawi, że będzie on można przeciągać, podczas gdy mój nie będzie, ponieważ nie będzie miał tego samego identyfikatora. – tvanfosson

+0

Ah. Dziękuję za wyjaśnienie. +1 –

2

Możesz dodać wydarzenie w datepicker i użyć go, aby go przeciągać.

//Add an event "onCreate" 
$.datepicker._updateDatepicker_Old = $.datepicker._updateDatepicker; 
$.datepicker._updateDatepicker = function(inst) { 
    this._updateDatepicker_Old(inst); 

    var onCreate = this._get(inst, 'onCreate'); 
    if (onCreate !== null) { 
     onCreate(inst); 
    } 
}; 

Po wywołaniu datepicker i zaimplementowaniu funkcji onCreate w celu przeciągnięcia.

$(function() { 
    //Create datepicker 
    $('#datepicker').datepicker({ 
     onCreate: function(inst) { 
      $(inst.dpDiv).draggable(); 
     } 
    }); 
});​ 

Example jsfiddle

+0

Dzięki za odpowiedź. To interesujący pomysł, ale wydaje się zbyt skomplikowane, aby osiągnąć to samo, co zaakceptowana odpowiedź. Wolałbym nie zhakować rzeczy w interfejsie jQuery, jeśli nie muszę. –

Powiązane problemy