Изменить Datepicker Month на клик [дубликат]

Альтернативы mod_rewrite

Многие базовые схемы виртуальных URL-адресов могут быть достигнуты без использования RewriteRules. Apache позволяет запускать скрипты PHP без расширения .php и с виртуальным аргументом PATH_INFO.

  1. Используйте PATH_INFO , Luke

    В настоящее время AcceptPathInfo On часто включается по умолчанию. В основном это позволяет .php и другим URL-адресам ресурсов переносить виртуальный аргумент:
    http://example.com/script.php/virtual/path
    
    Теперь этот /virtual/path отображается в PHP как $_SERVER["PATH_INFO"] , где вы можете обрабатывать любые дополнительные аргументы, как вам нравится. Это не так удобно, как разделить сегменты входного пути Apache на $1, $2, $3 и передать их как различные переменные $_GET в PHP.

  2. Включить MultiViews , чтобы скрыть расширение .php

    . Самый простой вариант - также отключить .php «Расширения файлов» в URL-адресах разрешены:
    Options +MultiViews
    
    Это означает, что Apache выбирает article.php для HTTP-запросов на /article из-за соответствующего базового имени. И это хорошо работает вместе с вышеупомянутой функцией PATH_INFO. Таким образом, вы можете просто использовать URL-адреса, такие как http://example.com/article/virtual/title. Это имеет смысл, если у вас есть традиционное веб-приложение с несколькими точками / сценариями PHP-скриптов. Обратите внимание, что MultiViews имеет другую / более широкую цель. Это повлечет за собой незначительное исполнение, потому что Apache всегда ищет другие файлы с соответствующими базовыми именами. Это фактически означает Content-Negotiation , поэтому браузеры получают лучшую альтернативу доступным ресурсам (например, article.en.php, article.fr.php, article.jp.mp4).
  3. SetType или SetHandler для сценариев без расширения .php

    . Более ориентированный подход, чтобы избежать переноса суффиксов .php в URL-адресах, - это настройка обработчика PHP для других файловых схем. Самый простой вариант - переопределить тип MIME / обработчика по умолчанию с помощью .htaccess:
    DefaultType application/x-httpd-php
    
    Таким образом, вы можете просто переименовать свой скрипт article.php только в article (без расширения), но все же обработать его как PHP-скрипт. Теперь это может иметь некоторые последствия для безопасности и производительности, поскольку теперь все файлы без расширения будут переданы через PHP. Поэтому вы можете альтернативно установить это поведение только для отдельных файлов:
    
      SetHandler application/x-httpd-php
      # or SetType 
    
    
    Это несколько зависит от настройки вашего сервера и используемого PHP SAPI. Общие альтернативы включают ForceType application/x-httpd-php или AddHandler php5-script. Снова обратите внимание, что такие настройки распространяются от одного .htaccess до подпапок. Вы всегда должны отключать выполнение сценария (SetHandler None и Options -Exec или php_flag engine off и т. Д.) Для статических ресурсов и загрузки / каталогов и т. Д.
  4. Другие схемы перезаписи Apache

    Среди его много вариантов, Apache предоставляет функции mod_alias, которые иногда работают так же хорошо, как и mod_rewrite s RewriteRules. Обратите внимание, что большинство из них должны быть настроены в разделе , но не в файлах конфигурации .htaccess для каждого каталога. ScriptAliasMatch в первую очередь предназначен для скриптов CGI, но также должен работать для PHP. Он позволяет регулярные выражения так же, как и любые RewriteRule. На самом деле это, пожалуй, самый надежный вариант для конфигурирования переднего контроллера. И простой Alias помогает с несколькими простыми схемами перезаписи. Даже простая директива ErrorDocument может использоваться, чтобы позволить скрипту PHP обрабатывать виртуальные пути. Обратите внимание, что это обходное решение kludgy, однако, запрещает все, кроме запросов GET, и наводняет error.log по определению. См. http://httpd.apache.org/docs/2.2/urlmapping.html для получения дополнительных советов.

3
задан JoJo 14 May 2015 в 20:52
поделиться

3 ответа

Предполагая, что у вас есть mm / dd / yyyy mask, , как в демо , вы можете сделать так:

UPD2. Использование API Datepicker

function ChangeMonth(month)
{
   var initialVal = $('#datepicker').datepicker('getDate')
   curMonth = date.getMonth(),

   if(month > 0 && curMonth < 12){
      initialVal.setMonth(curMonth + 1)
   } 
   if(month < 0 && curMonth > 1) {
      initialVal.setMonth(curMonth - 1)
   }
   $('#datepicker').datepicker('setDate', initialVal);
}

Вызывающие ChangeMonth(1) или ChangeMonth(-1) должны изменить дату в вашем поле datapicker.

UPD1. Если вы используете встроенную версию

Вы можете просто щелкнуть кнопками с событием jQuery click:

$('#datepicker .ui-datepicker-prev').click() // month back
$('#datepicker .ui-datepicker-next').click() //month forward
1
ответ дан shershen 19 August 2018 в 00:13
поделиться
  • 1
    извините, я должен был указать, что я использую пример inline, jqueryui.com/datepicker/#inline – JoJo 14 May 2015 в 20:50
  • 2
    хм, да, это было бы полезно узнать)) Проверьте обновленный пост! – shershen 14 May 2015 в 20:54
  • 3
    Вы никогда не должны писать такой код. Это плохая идея, если вы завершаете локализацию своего кода для работы в других местах. Внезапно это ломается. Положитесь на API, которые предоставляет ваша система. – dman2306 14 May 2015 в 21:04
  • 4
    @ dman2306 вы правы в целом. Также виджет jQueryUI Datepicker имеет параметр «dateFormat», и если он установлен, дата будет отображаться только таким образом, не учитывая языковой стандарт. Переписал эту часть. – shershen 14 May 2015 в 21:16
  • 5
    ничего себе, я не думал о вашем встроенном решении! в моем случае мне нужно установить его, используя параметр месяца, например, месяц + «день и год». Если бы я мог получить текущий отображаемый месяц, я бы смог сравнить его с этим и использовать предыдущие / следующие кнопки. Знаете ли вы, возможно ли это, если не выбрана дата? – JoJo 14 May 2015 в 21:28

Чтобы установить месяц выбора даты, используйте следующий код:

var date = $("#datepicker").datepicker( 'getDate' );
date.setMonth(month);
$("#datepicker").datepicker("setDate", date);

JSFIDDLE https://jsfiddle.net/seadonk/uh9g9sn4/ Это пример как установить месяц, уменьшить месяц или увеличить месяц выбора даты.

JQUERY

$().ready(function(){
   $("#SetMonth").click(function(){SetMonth(parseInt($('#month').val())-1);});
   $("#NextMonth").click(function(){NextMonth();});
   $("#PrevMonth").click(function(){PrevMonth();});
   $("#datepicker").datepicker();
   $("#datepicker").datepicker("setDate",new Date());
});

function SetMonth(month)
{
    var date = $("#datepicker").datepicker( 'getDate' );
    date.setMonth(month);
    $("#datepicker").datepicker("setDate", date);
}

function NextMonth()
{
    var date = $("#datepicker").datepicker( 'getDate' );
    date.setMonth(date.getMonth() + 1);
    $("#datepicker").datepicker("setDate", date);
}

function PrevMonth(month)
{
    var date = $("#datepicker").datepicker( 'getDate' );
    date.setMonth(date.getMonth() - 1);
    $("#datepicker").datepicker("setDate", date);
}

HTML

<input type="button" id="SetMonth" value="Set Month" />
<input type="text" id="month" value = "1"/><br /><br />    
<input type="button" id="PrevMonth" value="Prev Month" />
<div id="datepicker"></div>
<input type="button" id="NextMonth" value="Next Month" />
0
ответ дан Brino 19 August 2018 в 00:13
поделиться
  • 1
    Я не думаю, что это будет работать с inline datepicker. Извините, я не уточнил это раньше. – JoJo 14 May 2015 в 21:29
  • 2
    я обновил скрипку. Он отлично работает с встроенным выбором даты. jsfiddle.net/seadonk/uh9g9sn4 – Brino 14 May 2015 в 23:34
  • 3
    это отлично работает, за исключением того, что задается конкретная дата, когда изменяется месяц, чего я пытаюсь избежать. – JoJo 15 May 2015 в 13:35
  • 4
    когда месяц изменяется, он просто уменьшает или увеличивает месячный номер, день остается неизменным, для этого требуется setdate. Это похоже на ваше описание пред. месяц и следующий месяц. Что вам нужно делать конкретно? и почему этого недостаточно? – Brino 15 May 2015 в 14:02

Факты:

  • $("#datepicker").datepicker("setDate", date) следует использовать для установки «выбранная дата». В качестве побочного эффекта он также изменит «месяц показа». но использовать его только для установки «месяца показа» не является хорошей практикой.
  • $('#datepicker .ui-datepicker-prev').click() и $('#datepicker .ui-datepicker-next').click() следует использовать для установки «месяца показа» и у него нет побочных эффектов. Но имейте это в виду, это медленно, если вы установите «показательные месяцы» на несколько лет.
  • Невозможно получить текущий «отображаемый месяц».

Исходя из фактов, вот решение:

var currentDate = new Date ();
var currentMonth = new Date (currentDate.getFullYear(), currentDate.getMonth(), 1);

//Keep currentMonth sync with "display month"
$("#datepicker").datepicker({
    onChangeMonthYear: function (year, month, inst) {
        currentMonth = new Date(year, month - 1, 1);  
        //JavaScript used 0...11 for months. Jquery UI used 1...12 for months.
    },
});


function ChangeMonth(month)
{
    while (currentMonth < month) {
        $('#datepicker .ui-datepicker-next').click();
    };

    while (currentMonth > month) {
        $('#datepicker .ui-datepicker-prev').click();
    };
};
0
ответ дан Luo Jiong Hui 19 August 2018 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: