2012-05-03 3 views
1

Я использовал JQueryMobile's experiment Datepicker какое-то время, и он работал в старой каркасной конструкции. Вчера я изменил структуру до последней и обнаружил, что она разбивает макет Datepicker, когда я нажимаю на него.JQueryMobile Datepicker и новый фреймворк

broken layout

Кто ecountered такая же проблема ?? как ты это сделал? это означает, что datepicker не будет поддерживаться в последней фреймворке ??

Мой код идет ниже

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Page Title</title> 

    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <link rel="stylesheet" href="jquery.mobile-1.1.0.min.css" /> 
    <link rel="stylesheet" href="jquery.ui.datepicker.mobile.css" /> 
    <script src="jquery-1.7.2.min.js"></script> 



    <script> 
    //reset type=date inputs to text 
    $(document).bind("mobileinit", function(){ 
    $.mobile.page.prototype.options.degradeInputs.date = true; 

    }); 

    $(function() { 
     $("#datepicker").datepicker(); 
    }); 

    </script> 
    <script src="jquery.mobile-1.1.0.min.js"></script> 
    <script src="jQuery.ui.datepicker.js"></script> 
    <script src="jquery.ui.datepicker.mobile.js"></script> 
</script> 
</head> 
<body> 

<div data-role="page"> 

    <div data-role="header"> 
     <h1>Page Title</h1> 
    </div><!-- /header --> 

    <div data-role="content"> 
     <label for="date">Date Input:</label> 
     <input type="date" name="date" id="date" value="" /> 

     <div id='datepicker'></div> 
    </div><!-- /content --> 

    <div data-role="footer"> 
     <h4>Page Footer</h4> 
    </div><!-- /footer --> 
</div><!-- /page --> 

</body> 
</html> 

ответ

1

Вы также можете использовать этот один:

Jquery Mobile datepicker

Я не проверил, работает ли это с 1.1, но она постоянно обновляется и обеспечивает массу возможностей.

+0

Но он не показывает номер недели в пользовательском интерфейсе. Dats самая большая проблема с плагином datebox. –

+0

в последней версии он поддерживает номер недели тоже <3 –

3

я столкнулся с той же проблемой, и я просто изменил выбор даты API. Используйте этот, он даст все, что вы хотите, например, UI, например iOS, Android, jQuery Mobile, режим, модальный и т. Д., Чтобы установить вместе с кодом jQuery.

jQuery mobile datepicker

Проблема никогда не приходит после использования этого.

+0

Но мне нужен каландр view: (не выборщик. также я должен показать номер недели, который не поддерживается даже в DateBox. –

+0

Если вы хотите отобразить номер недели, используйте «headerText», где вы можете передать функцию (где вы определяете номер недели), и она отобразит это в вашем модальном окне. –

+0

Вы можете получить представление календаря с календарем Mobiscroll (и вы можете даже смешать его со скроллером времени, например) –

2

Найти этот код в jquery.ui.datepicker.mobile.js чуть ниже updateDatepicker();

$(".ui-datepicker-calendar .ui-btn", dp).each(function(){ 
var el = $(this); 
// remove extra button markup - necessary for date value to be interpreted correctly 
el.html(el.find(".ui-btn-text").text()); 
}); 

заменить

el.html(el.find(".ui-btn-text").text()); 

с

el.text(el.text()); 

Он работал для меня :)

1

после долгих поисков в сети Интернет, особенно по сравнению datebox и jqueryui DatePicker (mobiscroll и mobipick не годится для меня, поскольку я ищу календарь, я дошел до того, что решил С помощью кнопок DatePicker по нескольким причинам:

  • я использую его от давнего, я знаю его достаточно хорошо
  • я нуждался в beforeShowDay (событие, если это, конечно, можно иметь аналогичные fonction с помощью datebox и события/обратные вызовы) для настроить дни с классами
  • мне нужна заголовок с возможностями для изменения месяца и год (также возможно в datebox)
  • с этим экспериментом я уже имел DatePicker с jquerymobile чувствуют & взгляд

Я использовал его с:

  • JQuery 1.8.3
  • JQuery Мобильный 1.2.0
  • jqueryui DatePicker 1.8.21 (get it from here)

использованием DatePicker с более поздними версиями ломает макет на месяц изменения/год.

от here, я получил нужные мне файлы. Я использовал несколько ответов я нашел на различные вопросы, StackOverflow, чтобы сделать следующие изменения:

  • без изменений на jquery.ui.datepicker.mobile.css
  • jquery.ui.datepicker.mobile.js новый код :

    (function ($, undefined) { 
    
    //cache previous datepicker ui method 
    var prevDp = $.fn.datepicker; 
    
    //rewrite datepicker 
    $.fn.datepicker = function (options) { 
    
    var dp = this; 
    
    //call cached datepicker plugin 
    var retValue = prevDp.apply(this, arguments); 
    
    //extend with some dom manipulation to update the markup for jQM 
    //call immediately 
    function updateDatepicker() { 
        $(".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 
        $(".ui-datepicker-calendar .ui-btn", dp).each(function() { 
         var el = $(this); 
         // remove extra button markup - necessary for date value to be interpreted correctly 
         // only do this if needed, sometimes clicks are received that don't require update 
         // e.g. clicking in the datepicker region but not on a button. 
         // e.g. clicking on a disabled date (from next month) 
         var uiBtnText = el.find(".ui-btn-text"); 
         if (uiBtnText.length) 
          el.html(uiBtnText.text()); 
        }); 
    }; 
    
    //update after each operation 
    updateDatepicker(); 
    
        $(dp).on("click change", function(event, ui) 
    { 
    $target=$(event.target); 
    if(event.type=="click" && ($target.hasClass("ui-datepicker-month") || $target.hasClass("ui-datepicker-year")))   
        event.preventDefault(); 
    else 
        updateDatepicker(event); 
    }); 
    
    //return jqm obj 
    if (retValue) { 
        if (!retValue.jquery) return retValue; 
    } 
    return this; 
    }; 
    
    })(jQuery); 
    

я использую на() вместо события щелчка и я preventDefault по щелчку на месяц/год выберите меню.

И я использую это так:

$form 
    .trigger("create") 
    .find("input[type='date'], input:jqmData(type='date')") 
    .each(function() 
     { 
     $(this) 
      .after($("<div />").datepicker(
       { 
       altField   : "#" + $(this).attr("id"), 
       altFormat   : "dd/mm/yy", 
       showOtherMonths  : true, 
       selectOtherMonths   : true, 
       showWeek   : true, 
       changeYear   : true, 
       changeMonth   : true, 
       beforeShowDay  : beforeShowDay 
       })); 
     }); 

с beforeShowDay быть функция, возвращающая массив (см jqueryui Datepicker руководство).

Это работает для меня таким образом, и теперь мне просто нужно добавлять события, чтобы показывать только календарь, когда ввод данных получил фокус.

A link to jsbin example

0

копия ответа в другом месте:

Я работал над обновлением JQuery щ DatePicker к последней версии JQuery, jqueryui и Jquery мобильного поэтому для jq1.9.1 jqui 1.10.2 и jqm 1,3 +0,0. Я предпочел уйти, как и мой предыдущий ответ, чтобы вы могли видеть, как он развился.

changeMonth и changeYear выпадающий требуется особое внимание работе (unstylying был частым)

здесь, как я обновил экспериментальную jqueryui DatePicker для jqmobile:

js bin code snippet

Вы можете ссылка на datepicker вместо всего пакета jqueryui.

Предназначенный только дл чтени опоры предотвращает клавиатуру появляться на КСН

Это просто твик из DatePicker, чтобы заставить его работать на jqm, цель будет иметь возможность переопределить функцию _generatehtml из Datepicker виджета и быть в состоянии дать в качестве входной темы темы jquery для использования. Таким образом, вам не понадобится такая целая куча addClass и избежать ненужных манипуляций с DOM.

Я тестировал только ios 6 (iphone, ipad) и рабочий стол (хром, firefox, safari), сообщите нам о других тестах.

Надеется, что это помогает в кашице, как это было нужно :)

здесь весь код отделенным в HTML, JS и CSS:

HTML

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>Jqueryui 1.10.2 datepicker Integration in jquery mobile 1.3.0 and jquery 1.9.1 by aureltime</title> 
    <link rel="stylesheet" href="//ajax.aspnetcdn.com/ajax/jquery.mobile/1.3.0/jquery.mobile-1.3.0.min.css"> 
    <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js"></script> 
    <script src="//ajax.aspnetcdn.com/ajax/jquery.mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script> 
</head> 
<body> 
<div data-role="page"> 
    <div data-role="header"> 
     <h1>jQuery UI's Datepicker Styled for mobile adapted by Aureltime</h1>  
    </div> 
    <div data-role="content"> 
     <form action="#" method="get" id="form"> 
      <div data-role="fieldcontain"> 
       <label for="date">Date:</label> 
       <input type="date" name="date" id="date" value="" /> 
      </div>  
     </form> 
    </div> 
</div> 
</body> 
</html> 

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($("<div />", { 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; } 
0

Я сделал пользовательский сборщик DATETIME эффективного для андроида и iphone флипа (как даты и времени в двух перестройках) надеется, что это поможет

https://github.com/ngethe/jQM-DateBoxNgethe

Смежные вопросы