2010-09-11 12 views
5

Estoy usando jQuery Datepicker y tengo un pequeño problema.jQuery Datepicker - cerrar en la entrada haga clic en

Si se abre el marcador de fecha, y vuelve a hacer clic en el campo de entrada, no ocurre nada. ¿Cómo puedo cambiar eso ... el selector que se va a cerrar al hacer clic en la entrada si ya está abierto?

Gracias de antemano ...

+0

¿cómo inicialaze datepicker? –

Respuesta

6

Ya que está obligado a focus (por defecto), sólo se puede vincular a su propia .mousedown() manipulador y no va a interferir, como esto:

$("#datepicker").datepicker(); 
$("#datepicker").mousedown(function() { 
    $(this).datepicker("hide");  
}); 

You can give it a try here . Estoy usando mousedown porque así es como se detecta el comportamiento cercano, por lo que solo es consistente para un comportamiento más a prueba de futuro.

+0

¡Muchas gracias! – Filip

+0

@Filip - bienvenido :) –

2

Ya que no puedo comentar sin embargo ...

Una cosa molesta es desde el selector de fechas utiliza el enfoque, una vez que lo oculte, no se puede mostrar de nuevo sin desenfoque primero y luego de enfoque (así que haga clic en alguna parte else, luego haz clic de nuevo).

He resuelto esto añadiendo lo siguiente a la respuesta de Nick Craver (dentro de la mousedown):

$(this).blur(); 

por lo que debe tener este aspecto:

$("#datepicker").datepicker(); 
$("#datepicker").mousedown(function() { 
    $(this).datepicker("hide"); 
    $(this).blur(); 
}); 
+0

Para mí, esto abre el selector de fecha nuevamente – mbdev

17

he encontrado una manera mejor. ocultar parece hacer que no se abra en más clics. Y el desenfoque hace que el selector de fecha se abra un segundo después.

he usado de palanca:

$('.datepicker').mousedown(function() { 
    $('#ui-datepicker-div').toggle(); 
}); 
0

Con el fin de trabajar más de una vez (intente hacer clic varias veces en la entrada), debe usar:

$("#datepicker").datepicker();  
$("#datepicker").mousedown(function() { 
    var cond = $(this).data('datepicker').dpDiv.is(':visible'); 
    $(this).datepicker(cond ? 'hide' : 'show'); 
}); 
1

Esto funciona para mí (consola. el método de registro se genera para la prueba - eliminar para la producción):

// call addToggleListener function one time to init 
addToggleListener($('.myDatepickerInputs')); 

// the function 
function addToggleListener(elm) 
{ 
    elm.off('mouseup'); 

    elm.on('mouseup', function() 
    { 
     $(this).off('mouseup'); 
     $(this).datepicker("show"); 

     console.log("show"); 

     $(this).on('mouseup', function() 
     { 
      $(this).off('mouseup'); 
      $(this).datepicker("hide"); 
      addToggleListener($(this)); 

      console.log("hide"); 
     }); 
    }); 
} 

Llamar a la función usando los marcadores de fecha "onClo se "opción:

onClose: function() 
{ 
    addToggleListener($(this)); 
} 

Probado con Google Chrome.

+0

Hola @peterblunt, muchas gracias por su respuesta. También funciona para mí, pero solo sin llamar a la función de Cerrar. Tengo una pregunta, ¿es posible hacer lo mismo para múltiples datapickers? Tengo dos citadores en una página, ya que este código funciona solo para el primero. Realmente apreciaría su respuesta. – jupiteror

+0

Debería funcionar con todas las entradas datepicker iniciadas, con la clase 'myDatepickerInputs' (en este ejemplo). Lo probé de nuevo, diciendo que funciona. Tal vez sea porque no usas la opción 'onClose' para llamar a 'addToggleListener'. Saludos. – peterblunt

Cuestiones relacionadas