通过单击没有输入字段的图像来打开JQuery Datepicker


70

我想在用户单击图像时打开JQuery Datepicker。此后没有显示所选日期的输入字段。我将通过Ajax将输入的日期保存到服务器。

目前,我有以下代码:

<img src='someimage.gif' id="datepicker" />

$(document).ready(function() {
    $("#datepicker").datepicker({
            changeMonth: true,
            changeYear: true,
        }).click(function() { $(this).datepicker('show'); });
 });

但是当我单击图像时什么也没有发生。我也尝试过将datepicker()调用的结果保存到全局变量,然后从图像的onclick()事件中调用datepicker('show'),但结果相同。

Answers:


118

事实证明,一个简单的隐藏输入字段可以完成这项工作:

<input type="hidden" id="dp" />

然后像通常一样使用按钮图像属性作为图像:

    $("#dp").datepicker({
        buttonImage: '../images/icon_star.gif',
        buttonImageOnly: true,
        changeMonth: true,
        changeYear: true,
        showOn: 'both',
     });

最初,我尝试了一个文本输入字段,然后display:none在其上设置样式,但是这导致日历从浏览器的顶部而不是用户单击的位置出现。但是隐藏字段可以按需工作。


我们如何可以设置alignment当属性inputhidden类型?
参议员雅各布

2
如果有人需要的话,这是一个jsfiddle :-) -------- >>>>>> jsfiddle.net/pratik24/M9Hj6
patz 2013年

我想将其与日期时间选择器一起使用,但在扩展日期时间选择器中似乎没有任何选择。有人可以帮忙吗?
Rohit Arora 2015年

谢谢,您节省了我的时间:)
Braham Dev Yadav '18

24

jQuery文档说,当datePicker未与输入框关联时,需要将其附加到SPAN或DIV。您可以执行以下操作:

<img src='someimage.gif' id="datepickerImage" />
<div id="datepicker"></div>

<script type="text/javascript">
 $(document).ready(function() {
    $("#datepicker").datepicker({
            changeMonth: true,
            changeYear: true,
    })
    .hide()
    .click(function() {
      $(this).hide();
    });

    $("#datepickerImage").click(function() {
       $("#datepicker").show(); 
    });
 });
</script>

2
这行得通,但是奇怪的是我每月都失去一些功能。例如,我没有滚动打开动画效果。更重要的是,当我在日历上单击时,日历不会消失。
09年

另外,将click()方法添加到#datepicker的目的是什么?顺便说一句,我的意思是“方法”,而不是“每月”。在大脑上有日历!
09年

1
将click()方法添加到#datepicker的原因是使其隐藏,否则它将保持可见。请记住,仅当日历与文本框相关联时,标准行为才起作用。您可能会添加.blur()处理函数,以在将鼠标从日历移开时将其隐藏。
何塞·巴西里奥

我想将其与日期时间选择器一起使用,但在扩展日期时间选择器中似乎没有任何选择。有人可以帮忙吗?
Rohit Arora 2015年

23

如果您使用输入字段和图标(例如本示例):

<input name="hasta" id="Hasta"  type="text" readonly  />
<a href="#" id="Hasta_icono" ></a>

您可以将datepicker附加到您的图标(在我的情况下是通过CSS放置在A标签中),如下所示:

$("#Hasta").datepicker();
  $("#Hasta_icono").click(function() { 
   $("#Hasta").datepicker( "show" );
  });

正是我在寻找什么:-)
DilbertDave

8

要在鼠标悬停在日历图标上时更改“ ...”,您需要在datepicker选项中添加以下内容:

    showOn: 'button',
    buttonText: 'Click to show the calendar',
    buttonImageOnly: true, 
    buttonImage: 'images/cal2.png',

3

HTML:

<div class="CalendarBlock">
    <input type="hidden">
</div>

码:

$CalendarBlock=$('.CalendarBlock');
$CalendarBlock.click(function(){
    var $datepicker=$(this).find('input');
    datepicker.datepicker({dateFormat: 'mm/dd/yy'});
    $datepicker.focus(); });

2

具有隐藏的输入字段会导致日期选择器对话框定位出现问题(对话框在水平方向居中)。您可以更改对话框的边距,但是有更好的方法。

只需创建一个输入字段并通过将其不透明度设置为0并将其宽度设置为1px来“隐藏”它即可。还要将其放置在按钮附近(或下方),或希望日期选择器出现的任何位置。

然后将日期选择器附加到“隐藏”输入字段,并在用户按下按钮时显示它。

HTML:

<button id="date-button">Show Calendar</button>
<input type="text" name="date-field" id="date-field" value="">

CSS:

#date-button {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
    height 30px;
}

#date-field {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 1;
    width: 1px;
    height: 32px; // height of the button + a little margin
    opacity: 0;
}

JS:

$(function() {
   $('#date-field').datepicker();

   $('#date-button').on('click', function() {
      $('#date-field').datepicker('show');
   });
});

注意:未在所有浏览器上进行测试。


1
$(function() {
   $("#datepicker").datepicker({
       //showOn: both - datepicker will come clicking the input box as well as the calendar icon
       //showOn: button - datepicker will come only clicking the calendar icon
       showOn: 'button',
      //you can use your local path also eg. buttonImage: 'images/x_office_calendar.png'
      buttonImage: 'http://theonlytutorials.com/demo/x_office_calendar.png',
      buttonImageOnly: true,
      changeMonth: true,
      changeYear: true,
      showAnim: 'slideDown',
      duration: 'fast',
      dateFormat: 'dd-mm-yy'
  });
});

上面的代码属于这个链接


0
<img src='someimage.gif' id="datepicker" />
<input type="hidden" id="dp" />

 $(document).on("click", "#datepicker", function () {
   $("#dp").datepicker({
    dateFormat: 'dd-mm-yy',
    minDate: 'today'}).datepicker( "show" ); 
  });

您只需为代码点击或任何其他html标签点击事件添加此代码。这是通过在单击触发器时启动datepicker函数来完成的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.