2013-03-07 2 views
6

Diciamo che ho un campo #date. All'inizio ho inizializzare con alcune opzioni (che non sono importanti al momento):jQueryUs datepicker widget aggiunge la funzione 'onClose' dopo l'inizializzazione del widget

$('#date').datepicker(options); 

Poi, se provo ad aggiungere onClose funzione, lo farei:

$('#date').datepicker({onClose: function(dateText, inst){console.log("Hello World");}}); 

Howerver, questo override opzioni impostate prima. Diciamo che non ho accesso a queste opzioni: datepicker è inizializzato, le opzioni sono impostate e ora ho bisogno di aggiungere la funzione onClose. Come farlo? Ho provato .datepicker('option','onClose',function(){}); senza alcun effetto.

+1

Si dovrebbe inizializzare la 'datepicker' su un id solo una volta. Se lo fai più volte, quest'ultimo sostituirà le prime opzioni. È questo che sta succedendo? –

+1

Sì. Ecco perché ho bisogno di un altro modo per aggiungere la funzione 'onClose'. – alekwisnia

risposta

6

provare come

$('#date').datepicker('option' , 'onClose', function() {}); 
+0

Questo è quello che ho provato, non funziona neanche :( – alekwisnia

0

Prova questo:

$('#date').datepicker().bind('onClose',function(){ 
    console.log("Hello World"); 
}); 
+1

In realtà, questa è la soluzione più vicina. Ho modificato le mie opzioni in modo che attivino eventi come: 'onClose: function (dateText, inst) { $ (this) .trigger ("date_closed", [dateText, inst]} ' E poi posso usare questo trigger ovunque io voglia: ' $ ('# date'). on ('date_closed', function (dateText, inst) {}); ' Non troppo ordinato, ma soddisfa i miei bisogni :) – alekwisnia

+0

perché downvotare la mia risposta !!!!? –

+0

Forse è stato downvoted perché ['bind' è deprecato a favore di 'on'] (http: //api.jquery.com/bind/) e poiché datepicker ha [un metodo di opzione] (http://api.jqueryui.com/datepicker/#method-option) destinato a questo caso d'uso. – ChrisW

5

Prova questa:

$('#date').datepicker(); 
... 
$('#date').datepicker("option", { 
    onClose: function(dateText, inst){console.log("Hello World");} 
}); 

Naturalmente ciò sarebbe contrario alla precedente funzione di onClose che hai impostato prima. source: jQuery forum post

0

Definire la funzione di chiusura come una delle opzioni, durante l'inizializzazione. Questo funziona per me.

$('#date').datepicker({ 
    dateFormat: "dd/mm/yy", 
    onClose: function(dateText, inst){console.log("Hello World");} 
}); 
+0

Not durante l'inizializzazione: l'OP vuole eseguirlo dopo l'inizializzazione (es ng [il metodo di opzione] (http://api.jqueryui.com/datepicker/#method-option)). – ChrisW

0

Mi trovavo anche di fronte allo stesso problema che la funzione di chiusura precedente era stata sostituita. Dopo aver cercato molto e ho implementato la mia funzione per affrontare questo problema. Qui di seguito è il frammento di codice

function addCloseFunctionToDatePicker(id, funHandler) { 
    var $datePicker=$('#' + id); 
    var prevhandler = $datePicker.datepicker('option', 'onClose'); 
    $datePicker.datepicker('option', { 
     onClose: function (dateText, inst) {      
      if (prevhandler) { 
       prevhandler(dateText, inst); 
      } 
      funHandler(dateText, inst);     
     }    
    });  
} 

meccanismo di chiamata:

addCloseFunctionToDatePicker('myDatePicker', function(){ alert("I'm next method"); });