2009-04-11 18 views

risposta

9

$ (". Ui-datepicker"). Draggable() non funziona?

+0

infatti lo fa. Sono ovviamente nuovo per l'interfaccia utente di jQuery, quindi grazie per l'aiuto su una domanda noobish. –

+0

nessun problema :) per sapere quali classi e gli elementi ids caricati tramite javascript, installare Firebug. – zalew

+0

Oh credimi, Firebug è mio amico. Non sapevo nemmeno se fosse possibile rendere trascinabile l'appuntato. –

6

L'ordine è importante.

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

EDIT: C'è una sottile differenza tra le forniture risposta @JZ e la mia. Utilizzando l'esempio di JZ, qualsiasi datapicker nella pagina sarà trascinabile, anche quelli che sono in linea (associati a un DIV anziché a un elemento di input). Il mio codice renderà trascinabili i popup datepickers. Il plugin datepicker crea un singolo DIV (chiamato ui-datepicker-div) per tutti i popup e lo riutilizza per qualsiasi input sulla pagina a cui è stato applicato il DatePicker. Per i DIV o SPAN in linea crea un nuovo datepicker senza nome all'interno di DIV/SPAN che ha la classe .ui-datepicker, ma non ha il nome. In questo caso, il mio codice non renderà trascurabile il datapicker, probabilmente il comportamento corretto, ma JZs poiché si abbinerà in base alla classe.

Esempio:

<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

Non l'ho provato da quando ha funzionato la risposta di JZ, ma non avresti incontrato un problema con più datepicker sulla stessa pagina con questa soluzione? –

+0

C'è una differenza tra il mio codice e JZ. Per un elemento di input, datepicker creerà solo un singolo ui-datepicker-div e lo riutilizzerà per tutti gli input che richiedono un popup. Se usi un calendario in linea, però, il codice JZ lo renderà trascinabile, mentre il mio non lo farà poiché non avrà lo stesso id. – tvanfosson

+0

Ah. Grazie per la spiegazione. +1 –

2

È possibile aggiungere un evento in datepicker e utilizzarlo per rendere trascinabile.

//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); 
    } 
}; 

Dopo aver chiamato datepicker e implementato la funzione onCreate per renderlo trascinabile.

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

Example jsfiddle

+0

Grazie per la risposta. Questa è un'idea interessante, ma sembra eccessivamente complessa per realizzare la stessa cosa della risposta accettata. Preferirei non modificare le cose sull'interfaccia utente di jQuery se non dovessi farlo. –

Problemi correlati