2013-01-04 18 views
11

Ich habe derzeit ein Dialogfeld mit zwei Eingängen als Inhalt (mit den beiden Eingängen .datepicker()). Wenn ich das Dialogfeld öffne, wird die erste Eingabe zum Fokus und der erste Datumsauswahl wird automatisch angezeigt. Ich habe versucht, das div zu verbergen und die Eingabe zu verwischen, aber dadurch erscheint der Datumszeiger nicht mehr im Fokus.jQueryUI Dialog/Datepicker Auto-Opens

Idealerweise mag ich die folgende Lage sein:

  • öffnen Sie das Dialogfeld (mit keinem Kalenderwerkzeug zeigt).
  • Klicken Sie auf die erste Eingabe und lassen Sie sich den Datumszeiger anzeigen.

Hier ist meine aktuellen Code:

javascript:

$("#to").datepicker({ 
     onClose: function (selectedDate) { 
     $("#from").datepicker("option", "minDate", selectedDate); 
     } 
    }); 

    $("#from").datepicker({ 
    onClose: function (selectedDate) {        
     $("#to").datepicker("option", "maxDate", selectedDate); 
    } 
}); 


$("#settingsDialog").dialog({ 
    autoOpen: false, 
    open: function (event, ui) { 
        if ($(".ui-datepicker").is(":visible")) 
         $(".ui-datepicker").hide(); 

        $("#to").blur(); 
        $this.focus().click(); 
       }, 
    close: function() { 
     $(this).dialog("close"); 
    } 
}); 

ich auch eine jsfiddle Demo gemacht haben: http://jsfiddle.net/ARnee/19/

ich online gesucht haben nach einer Lösung und fand ähnliche questions , aber keine, die zu helfen scheinen. Könnte mir jemand helfen ?!

EDIT:

Der Browser ich verwende ist Chrome.

Antwort

7

Kann ein Dummy-Eingabe im Dialog bleiben, die keine Höhe hat, wird so nicht zu sehen. Legen Sie sie vor den picker Felder

<input style="height:0px; border:none"/> 

DEMO: http://jsfiddle.net/ARnee/20/

+0

Vielen Dank für Ihre Hilfe! Das war eine geniale Art, sich diesem zu nähern! – Dom

+0

Danke. Ich setze auch 'background: transparent', weil form unterschiedliche Farbe hat. –

1

Sie können das Kalender auf offenen des Dialogs schaffen, etwa so:

$("#settingsDialog").dialog({ 
    autoOpen: false, 
    open: function (event, ui) { 
        //if ($(".ui-datepicker").is(":visible")) 
        // $(".ui-datepicker").hide(); 

        $("#to").blur(); 
       }, 
    close: function() { 
     $("#to").datepicker("destroy"); 
     $("#from").datepicker("destroy"); 
     $(this).dialog("close"); 
    } 
}); 



$("#b1").click(function(){ 
     $("#settingsDialog").dialog("open"); 
     $("#to").datepicker({ 
     onClose: function (selectedDate) { 
      $("#from").datepicker("option", "minDate", selectedDate); 
     } 
     }); 

     $("#from").datepicker({ 
     onClose: function (selectedDate) { 
      $("#to").datepicker("option", "maxDate", selectedDate); 
     } 
     }); 
}); 

+0

auch 'destroy' auf nahe bei Dialog verwenden, sollten wieder – charlietfl

+0

@charlietfl verwendet wird - oops, du bist Recht. Bearbeitet. – mccannf

+0

Das hat es geschafft! Vielen Dank! – Dom

0
$(document).ready(function(){ 



$("#settingsDialog").dialog({ 
    autoOpen: false, 
    open: function (event, ui) { 
     $("#to").datepicker({ 
     onClose: function (selectedDate) { 
      $("#from").datepicker("option", "minDate", selectedDate); 
     } 
    }); 

    $("#from").datepicker({ 
     onClose: function (selectedDate) {       $("#to").datepicker("option", "maxDate", selectedDate); 
    } 
}); 
        if ($(".ui-datepicker").is(":visible")) 
         $(".ui-datepicker").hide(); 

        $("#to").blur(); 
        $this.focus().click(); 
       }, 
    close: function() { 
     $("#to").datepicker("destroy"); 
     $("#from").datepicker("destroy"); 
     $(this).dialog("close"); 
    } 
}); 



    $("#b1").click(function(){ 
     $("#settingsDialog").dialog("open"); 
    }); 

}); 
​ 
+0

Das funktioniert leider nur beim ersten Öffnen des Dialogs. Wenn Sie es schließen und erneut öffnen, bleibt das Problem bestehen. – Dom

+0

Sie haben recht, wie mccannf sagte, verwenden Sie zerstören für Datepicker auf schließen wird es lösen – Madi

13

Versuchen Sie, die tabindex Attribut an den Eingängen der Datepicker auf -1 enthält.

<input type="text" id="to" tabindex="-1" /> 

EDIT:

<input id="to" type="text" tabindex="-1" /> 
<input id="from" type="text" tabindex="-1" /> 

DEMO: http://jsfiddle.net/ARnee/32/

+1

+1 - damit dies funktioniert, müssten Sie dies auf beide 'Input's anwenden. Egal, sehr schöne Entdeckung! – Dom