2012-10-29 11 views
6

Sto lavorando a un plug-in jQuery da utilizzare con le caselle di testo e mi piacerebbe che funzionasse con i widget jQueryUI che fanno uso di caselle di testo, come il datepicker. Questo mi sta causando problemi perché sembra che l'evento di sfocatura sul datepicker venga lanciato prima che il valore sia effettivamente impostato.Collegamento a jQuery Datepicker Blur Event

Una soluzione alternativa che ho utilizzato è impostare un timeout prima di eseguire il codice per consentire il tempo per il valore di datepickers da impostare. Vedi sotto Codice:

$(this).blur(function() { 
    // $(this).val() == "" 
    var elem = $(this); 
    setTimeout(function() { 
     //elem.val() != "" 
    },100); 
}); 

Non sono sicuro che questa soluzione è la migliore soluzione al problema o anche se funzionerà sempre. Se imposto il timeout a 10 millisecondi anziché a 100, non funziona: sono preoccupato che il codice sia lento da eseguire per qualsiasi motivo, 100 potrebbe non essere sempre sufficiente.

Qualcuno può pensare a una soluzione migliore a questo problema?

risposta

6

Alla fine la mia soluzione era quella di collegare in modo dinamico in per l'evento onClose se la casella di testo in questione è utilizzata da un datepicker (controllando per la hasDatepicker classe). Il problema con questo è che non puoi associare l'evento come faresti normalmente dato che il DatePicker può avere solo una funzione associata ai suoi eventi specifici. Per ovviare a questo controllo ho se v'è una funzione già attaccato, e se è così lo chiamano dopo il mio codice:

var elem = $(this); 
var someFunction = function() { 
    //elem.val() != "" 
} 
if (elem.hasClass('hasDatepicker')) { 
    var onClose = elem.datepicker('option','onClose'); 
    elem.datepicker('option','onClose', function() { 
     someFunction(); 
     if (onClose) { onClose(elem.val()); } 
    }); 
} else { 
    elem.bind('blur',someFunction); 
} 
5

Ci sono diversi eventi in DatePicker che è possibile collegare in onSelect o onClose e this all'interno di essi è l'input che è il selettore di datepicker. È possibile utilizzare l'DatePicker ui argomento per ottenere il valore anche

$(selector).datepicker({ 
    onClose:function(evt, ui){    
      $(this).myPlugin('someMethod'); 
    }) 
}) 
+0

$ () .datepicker ('option', 'onSelect', function() {...}); – JakeRobb

0

Questo è il modo più semplice per farlo: "datepickerSelect"

$('#element').datepicker({ 
    onClose: function() { 
     $(this).trigger('change'); 
    } 
}); 


$('#element').bind('change',function(){ 
    // someFunction(); 
});