2017-09-30 1 views
5

Ich habe benutzerdefinierte Datumsbereichsauswahl mit Jquery UI erstellt.Google Chrome Problem in JQuery UI Datepicker

Es funktioniert perfekt in anderen Browser, aber in Google funktioniert es nicht richtig.

Siehe unten Snap.

Die rote Runde sollte leer sein, aber es wird etwas Text, vielleicht wegen Schleifen, aber ich kann es nicht herausfinden.

enter image description here

Mein js Code.

$(function() { 

     from = $("#from").datepicker({ 
      defaultDate: "+1w", 
      numberOfMonths: 2, 
      minDate: +7, //THIS IS FIRST PLACE 
      autoclose: false, 
      beforeShow: function (input, inst) { 
       $("#ui-datepicker-div td").off(); 

       $(document).on("mouseenter", "#ui-datepicker-div td", function (e) { 
        $(this).parent().addClass("finalRow"); 
        $(".finalRow").parents('.ui-datepicker-group-last').parent().find('.ui-datepicker-group-first').find('tr').last().addClass("finalRowRangeOtherTable"); 
        $(".finalRow").prevAll().find("td:not(.ui-datepicker-unselectable)").removeClass("highlight"); 
        $(this).prevAll("td:not(.ui-datepicker-unselectable)").removeClass("highlight"); 
       }); 
      }, 
      beforeShowDay: function (date) { 
       var d = date.getTime(); 
       if ($("#to").datepicker("getDate") && d == $("#to").datepicker("getDate").getTime()) { 
        return [true, 'ui-red', '']; 
       } 

       if ($("#from").datepicker("getDate") && $("#to").datepicker("getDate") && d < $("#to").datepicker("getDate").getTime() && d > $("#from").datepicker("getDate").getTime()) { 
        return [true, 'ui-state-highlight', '']; 
       } else { 
        return [true, '']; 
       } 
      }, 
      onClose: function (selectedDate) { 
       var selectedDate = $("#from").datepicker("getDate"); 
       if (selectedDate != null) { 
        $('#to').datepicker('option', 'minDate', selectedDate).datepicker('refresh'); //THIS IS SECOND PLACE 
       } 
       $("#from").datepicker("option", "dateFormat", "d MM, yy"); 
       $("#to").datepicker("show"); 
      } 
     }) 

     to = $("#to").datepicker({ 
      defaultDate: "+1w", 
      numberOfMonths: 2, 
      autoclose: false, 
      beforeShow: function (input, inst) { 
       $("#ui-datepicker-div td").off(); 

       $(document).on("mouseenter", "#ui-datepicker-div td", function (e) { 

        $(this).parent().addClass("finalRow"); 
        $(".finalRow").parents('.ui-datepicker-group-last').parent().find('.ui-datepicker-group-first').find('tr').last().addClass("finalRowRangeOtherTable"); 
        $(".finalRowRangeOtherTable").find("td:not(.ui-datepicker-unselectable)").addClass("highlight"); 
        $(".finalRowRangeOtherTable").prevAll().find("td:not(.ui-datepicker-unselectable)").addClass("highlight"); 

        $(".finalRow").prevAll().find("td:not(.ui-datepicker-unselectable)").addClass("highlight"); 
        $(this).prevAll("td:not(.ui-datepicker-unselectable)").addClass("highlight"); 
       }); 

       $(document).on("mouseleave", "#ui-datepicker-div td", function (e) { 

        $(this).parent().removeClass("finalRow"); 
        $("#ui-datepicker-div td").removeClass("highlight"); 

        $(".finalRowRange").removeClass("finalRowRange").find('.highlight').removeClass("highlight"); 
        $(".finalRowRangeOtherTable").removeClass("finalRowRangeOtherTable").find('.highlight').removeClass("highlight"); 

       }); 
      }, 
      beforeShowDay: function (date) { 
       var d = date.getTime(); 
       if ($("#from").datepicker("getDate") && d == $("#from").datepicker("getDate").getTime()) { 
        return [true, 'ui-red', '']; 
       } 
       if ($("#from").datepicker("getDate") && $("#to").datepicker("getDate") && d < $("#to").datepicker("getDate").getTime() && d > $("#from").datepicker("getDate").getTime()) { 
        return [true, 'ui-state-highlight', '']; 
       } else { 
        return [true, '']; 
       } 
      } 
     }) 
     .on("change", function() { 
      from.datepicker("option", "maxDate", getDate(this)); 
      $("#to").datepicker("option", "dateFormat", "d MM, yy"); 
     }); 
    }); 

Ich glaube nicht, dass es Problem mit CSS, weil es perfekt auf anderen Browsern auch in IE funktioniert.

Ich fand auch, dass es tritt auf, wenn und wenn ich minDate zu einem Datepicker, siehe meine Kommentare in js Code zuweisen, wenn ich, dass die Linien zu entfernen, Datepicker funktionieren gut, aber wie ich Zeitraum festlegen picker verwenden, Ich werde diese Zeilen brauchen, kann ich irgendeine andere Alternative benutzen?

Hier ist Geige.

LINK
  1. öffnen Geige in Google Chrome
  2. wählen 10. Oktober als Startdatum
  3. 23. Oktober Wählen Sie als Enddatum
  4. Öffnen Sie nun beide der picker eins nach dem anderen, und schweben über Termine und Sie werden zusätzliches Datum sehen, wie ich im Snap (oben) hinzugefügt habe.
  5. Ich konnte CSS von Live-Link nicht überschreiben, so sieht Design wenig owkword ..
+1

Scheint 61. vor dem Chrom-Update mit Chrom wie ein Fehler eingeführt worden zu sein, das funktionierte, wurde behoben. Danach sehe ich OPs Problem. – Zyren

Antwort

4

Ich hatte dein eigenes Problem.

Chrome scheint das Unicode-Zeichen nicht korrekt zu lösen & # xa0.

Suchen Sie also & # xa0 in Ihrem jquery-ui * .js und ersetzen durch "".

Ich ersetzte nur das angegebene Vorkommen des Zeichens (Suche "UI-Datepicker-anderen-Monat" in dieser Datei) und es funktioniert.

+0

es funktioniert, danke! aber ich verstehe das immer noch nicht, was dieses "& # xa0" eigentlich macht? und was, wenn ich es aus der ganzen js-Datei entferne? – Bharat

+0

"& # xa0" ist der Unicode des nicht brechenden Raumes. Ich denke, dass Sie vorsichtig sein sollten, wenn Sie die gesamte js-Datei entfernen. Sie sollten den Codeabschnitt lesen, in dem das Zeichen verwendet wird, um genau zu wissen, warum es verwendet wird. Diese Vorgehensweise ist nützlich, um eine Ausnahme zu verhindern. –

+2

Während diese Antwort das Problem technisch löst, bin ich mir ziemlich sicher, dass dies am Ende von Chrome gepatcht werden sollte. Ich würde nicht empfehlen, den jquery ui datepicker Code zu aktualisieren, es sei denn, du musstest es wirklich tun, um das Problem zu beheben, bis Chrome es patchen kann. – Zyren

4

Wie Zyren bemerkt scheint dies einen Fehler in Chrome 61. in Chrome 62. feinen