Öffnen Sie JQuery Datepicker, indem Sie auf ein Bild ohne Eingabefeld klicken

70

Ich möchte den JQuery Datepicker öffnen, wenn der Benutzer auf ein Bild klickt. Es gibt kein Eingabefeld, in dem das ausgewählte Datum danach angezeigt wird. Ich werde nur das eingegebene Datum über Ajax auf dem Server speichern.

Derzeit habe ich diesen Code:

<img src='someimage.gif' id="datepicker" />

$(document).ready(function() {
    $("#datepicker").datepicker({
            changeMonth: true,
            changeYear: true,
        }).click(function() { $(this).datepicker('show'); });
 });

Aber nichts passiert, wenn ich auf das Bild klicke. Ich habe auch versucht, das Ergebnis des Aufrufs von datepicker () in einer globalen Variablen zu speichern und dann datepicker ('show') vom Ereignis onclick () des Bildes aufzurufen, aber das gleiche Ergebnis.

ep4169
quelle

Antworten:

118

Es stellt sich heraus, dass ein einfaches verstecktes Eingabefeld die Aufgabe erfüllt:

<input type="hidden" id="dp" />

Verwenden Sie dann wie gewohnt das Attribut buttonImage für Ihr Bild:

    $("#dp").datepicker({
        buttonImage: '../images/icon_star.gif',
        buttonImageOnly: true,
        changeMonth: true,
        changeYear: true,
        showOn: 'both',
     });

Anfangs habe ich ein Texteingabefeld ausprobiert und dann einen display:noneStil darauf festgelegt, aber dadurch wurde der Kalender oben im Browser angezeigt und nicht dort, wo der Benutzer geklickt hat. Das versteckte Feld funktioniert jedoch wie gewünscht.

ep4169
quelle
Wie können wir die alignmentEigenschaft festlegen, wenn inputes sich um einen hiddenTyp handelt?
Sen Jacob
2
Hier ist eine jsfiddle, wenn jemand sie braucht :-) -------- >>>>>> jsfiddle.net/pratik24/M9Hj6
patz
Ich möchte es mit der Datums- und Uhrzeitauswahl verwenden, aber es scheint keine Option für die erweiterte Datums- und Uhrzeitauswahl zu geben. Kann jemand helfen?
Rohit Arora
Danke, du hast meine Stunden gerettet :)
Braham Dev Yadav
24

In der jQuery-Dokumentation heißt es, dass der datePicker an ein SPAN oder einen DIV angehängt werden muss, wenn er keinem Eingabefeld zugeordnet ist. Sie könnten so etwas tun:

<img src='someimage.gif' id="datepickerImage" />
<div id="datepicker"></div>

<script type="text/javascript">
 $(document).ready(function() {
    $("#datepicker").datepicker({
            changeMonth: true,
            changeYear: true,
    })
    .hide()
    .click(function() {
      $(this).hide();
    });

    $("#datepickerImage").click(function() {
       $("#datepicker").show(); 
    });
 });
</script>
Jose Basilio
quelle
2
Das funktioniert, aber seltsamerweise verliere ich mit diesem Monat einige Funktionen. Zum Beispiel bekomme ich den Scroll-Open-Animationseffekt nicht. Noch wichtiger ist, dass der Kalender nicht verschwindet, wenn ich außerhalb klicke.
ep4169
Was ist der Zweck des Hinzufügens dieser click () -Methode zu #datepicker? Übrigens meinte ich "Methode", nicht "monatlich". Ich habe Kalender im Gehirn!
ep4169
1
Der Grund für das Hinzufügen der click () -Methode zum #datepicker besteht darin, sie auszublenden, da sie sonst sichtbar bleibt. Beachten Sie, dass das Standardverhalten nur funktioniert, wenn der Kalender einem Textfeld zugeordnet ist. Sie könnten wahrscheinlich einen .blur () - Handler hinzufügen, um ihn auszublenden, wenn Sie die Maus vom Kalender entfernen.
Jose Basilio
Ich möchte es mit der Datums- und Uhrzeitauswahl verwenden, aber es scheint keine Option für die erweiterte Datums- und Uhrzeitauswahl zu geben. Kann jemand helfen?
Rohit Arora
23

Wenn Sie ein Eingabefeld und ein Symbol verwenden (wie in diesem Beispiel):

<input name="hasta" id="Hasta"  type="text" readonly  />
<a href="#" id="Hasta_icono" ></a>

Sie können den Datepicker wie folgt an Ihr Symbol anhängen (in meinem Fall innerhalb des A-Tags über CSS):

$("#Hasta").datepicker();
  $("#Hasta_icono").click(function() { 
   $("#Hasta").datepicker( "show" );
  });
Pablius
quelle
Genau das, wonach ich gesucht habe :-)
DilbertDave
8

Um das "..." zu ändern, wenn Sie mit der Maus über das Kalendersymbol fahren, müssen Sie in den Datumsauswahloptionen Folgendes hinzufügen:

    showOn: 'button',
    buttonText: 'Click to show the calendar',
    buttonImageOnly: true, 
    buttonImage: 'images/cal2.png',
Mohamed Ghr
quelle
3

HTML:

<div class="CalendarBlock">
    <input type="hidden">
</div>

CODE:

$CalendarBlock=$('.CalendarBlock');
$CalendarBlock.click(function(){
    var $datepicker=$(this).find('input');
    datepicker.datepicker({dateFormat: 'mm/dd/yy'});
    $datepicker.focus(); });
Rahen Rangan
quelle
2

Ein verstecktes Eingabefeld führt zu Problemen bei der Positionierung des Datumsauswahldialogs (der Dialog ist horizontal zentriert). Sie können den Rand des Dialogfelds ändern, aber es gibt einen besseren Weg.

Erstellen Sie einfach ein Eingabefeld und "verbergen" Sie es, indem Sie die Deckkraft auf 0 setzen und 1p breit machen. Positionieren Sie es auch in der Nähe (oder unter) der Schaltfläche oder an der Stelle, an der der Datums-Picker angezeigt werden soll.

Fügen Sie dann den Datepicker in das "versteckte" Eingabefeld ein und zeigen Sie ihn an, wenn der Benutzer die Taste drückt.

HTML:

<button id="date-button">Show Calendar</button>
<input type="text" name="date-field" id="date-field" value="">

CSS:

#date-button {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
    height 30px;
}

#date-field {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 1;
    width: 1px;
    height: 32px; // height of the button + a little margin
    opacity: 0;
}

JS:

$(function() {
   $('#date-field').datepicker();

   $('#date-button').on('click', function() {
      $('#date-field').datepicker('show');
   });
});

Hinweis: Nicht mit allen Browsern getestet.

Jari
quelle
1
$(function() {
   $("#datepicker").datepicker({
       //showOn: both - datepicker will come clicking the input box as well as the calendar icon
       //showOn: button - datepicker will come only clicking the calendar icon
       showOn: 'button',
      //you can use your local path also eg. buttonImage: 'images/x_office_calendar.png'
      buttonImage: 'http://theonlytutorials.com/demo/x_office_calendar.png',
      buttonImageOnly: true,
      changeMonth: true,
      changeYear: true,
      showAnim: 'slideDown',
      duration: 'fast',
      dateFormat: 'dd-mm-yy'
  });
});

Der obige Code gehört zu diesem Link

Kailas
quelle
0
<img src='someimage.gif' id="datepicker" />
<input type="hidden" id="dp" />

 $(document).on("click", "#datepicker", function () {
   $("#dp").datepicker({
    dateFormat: 'dd-mm-yy',
    minDate: 'today'}).datepicker( "show" ); 
  });

Sie fügen diesen Code einfach für das Klicken auf ein Bild oder ein anderes Ereignis zum Klicken auf ein HTML-Tag hinzu. Dies erfolgt durch Starten der Datepicker-Funktion, wenn wir auf den Auslöser klicken.

karthikeyan ganesan
quelle