jQuery Mobile date picker

后端 未结 8 1815
既然无缘
既然无缘 2021-02-01 15:52

Is there someone out there that has a good date picker for jQuery mobile?

I\'m going to let the user select a \"from\" date and a \"to\" date and I haven\'t found anythi

8条回答
  •  心在旅途
    2021-02-01 16:15

    I worked on updating the jquery ui datepicker to latest versions of jquery , jqueryui and jquery mobile so for jq1.9.1 jqui 1.10.2 and jqm 1.3.0. I prefered to leave as is my previous answer so you can see how it evolved.

    the changeMonth and changeYear dropdown needed special care to work (unstylying was frequent)

    here it is how i updated the experimental jqueryui datepicker for jqmobile :

    js bin code snippet

    You can link to the datepicker script instead of the whole jqueryui package.

    The readonly prop prevents the keyboard to appear on ios

    It is just a tweak of the datepicker to make it work on jqm, the goal would be to be able to override the _generatehtml function of datepicker widget and being able to give as input te jquery mobile theme to use. So you'll not need that whole bunch of addClass and avoid unnecessary DOM manipulation

    I only tested for ios 6 (iphone, ipad) and desktop (chrome, firefox, safari), let us know about other tests.

    Hope it helps as mush as needed it :)

    here is all the code separated in html, js and css :

    HTML

     
     
        
        
         
        Jqueryui 1.10.2 datepicker Integration in jquery mobile 1.3.0 and jquery 1.9.1 by aureltime 
        
        
        
    
     
      
    

    jQuery UI's Datepicker Styled for mobile adapted by Aureltime

    JS

    //reset type=date inputs to text
    $.mobile.page.prototype.options.degradeInputs.date = true;
    
    $("#form").trigger("create");
    $( document )
      .on( "pageinit", function(){
    
    $("#date")
        .prop("readonly", "true")
        .on("click", function(){
    $input=$(this);
    $next=$input.next();
    
    if($next.hasClass("hasDatepicker"))
      $next.hide();
    
    $input
          .hide()
          .after( $( "
    ", { id : "datepicker_"+$input.attr("id")}).datepicker( { altField : "#" + $input.attr( "id" ), altFormat : "dd/mm/yy", defaultDate : $input.val(), showOtherMonths : true, selectOtherMonths : true, //showWeek : true, changeYear : true, changeMonth : true, //showButtonPanel : true, //beforeShowDay : beforeShowDay, onSelect : function( dateText, inst) { $("#datepicker_"+$input.attr("id")).hide(); $input.show(); } })); }); }); (function($, undefined ) { //cache previous datepicker ui method var prevDp = $.fn.datepicker; //rewrite datepicker $.fn.datepicker = function( options ){ var dp = this; //call cached datepicker plugin prevDp.call( this, options ); //extend with some dom manipulation to update the markup for jQM //call immediately function updateDatepicker(event){ $( ".ui-datepicker-header", dp ).addClass("ui-body-c ui-corner-top").removeClass("ui-corner-all"); $( ".ui-datepicker-prev, .ui-datepicker-next", dp ).attr("href", "#"); $( ".ui-datepicker-prev", dp ).buttonMarkup({iconpos: "notext", icon: "arrow-l", shadow: true, corners: true}); $( ".ui-datepicker-next", dp ).buttonMarkup({iconpos: "notext", icon: "arrow-r", shadow: true, corners: true}); $( ".ui-datepicker-calendar th", dp ).addClass("ui-bar-c"); $( ".ui-datepicker-calendar td", dp ).addClass("ui-body-c"); $( ".ui-datepicker-calendar a", dp ).buttonMarkup({corners: false, shadow: false}); $( ".ui-datepicker-calendar a.ui-state-active", dp ).addClass("ui-btn-active"); // selected date $( ".ui-datepicker-calendar a.ui-state-highlight", dp ).addClass("ui-btn-up-e"); // today"s date if(typeof event != "undefined") { var classe= $(event.target).attr("class"); //alert(classe); } $( ".ui-datepicker-calendar .ui-btn", dp ).each(function(){ var el = $(this); var buttonText = el.find( ".ui-btn-text" ); // remove extra button markup - necessary for date value to be interpreted correctly if(buttonText.length) el.html( el.find( ".ui-btn-text" ).text() ); }); // } $( dp ) .off() .on( "click", updateDatepicker) .find("select") .on( "change", function(event){updateDatepicker(event);}); } //update now updateDatepicker(); //return jqm obj return this; }; })( jQuery );

    CSS

    div.hasDatepicker{ display: block; padding: 0; overflow: visible;  margin: 8px 0; }
    .ui-datepicker {  overflow: visible; margin: 0; max-width: 500px;  }
    .ui-datepicker .ui-datepicker-header { position:relative; padding:.4em 0; border-bottom: 0; font-weight: bold; }
    .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { padding: 1px 0 1px 2px; position:absolute; top: .5em; margin-top: 0; text-indent: -9999px; }
    
    .ui-datepicker .ui-datepicker-prev { left:6px; }
    .ui-datepicker .ui-datepicker-next { right:6px; }
    .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
    .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
    .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
    .ui-datepicker select.ui-datepicker-month, 
    .ui-datepicker select.ui-datepicker-year { width: 49%;}
    .ui-datepicker table {width: 100%; border-collapse: collapse; margin:0; }
    .ui-datepicker td { border-width: 1px; padding: 0; text-align: center; }
    .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em 0; font-weight: bold; margin: 0; border-width: 0; text-align: center; text-decoration: none; }
    
    .ui-datepicker-calendar th { padding-top: .3em; padding-bottom: .3em; }
    .ui-datepicker-calendar th span, .ui-datepicker-calendar span.ui-state-default { opacity: .3; }
    .ui-datepicker-calendar td a { padding-top: .5em; padding-bottom: .5em; }
    

    Here is the updated version to work with jqm 1.4 : jsbin jqm 1.4.0

    It is taking account of changes of jquery mobile 1.4.0 and needs a little bit less of dom manipulation

提交回复
热议问题