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

时间:2009-07-10 21:18:27

标签: jquery datepicker

我想在用户点击图片时打开JQuery Datepicker。没有输入字段,之后显示所选日期;我只是想通过Ajax将输入的日期保存到服务器。

目前我有这段代码:

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

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

但是当我点击图片时没有任何反应。我也尝试将datepicker()调用的结果保存到全局var,然后从图像的onclick()事件中调用datepicker('show'),但结果相同。

8 个答案:

答案 0 :(得分:117)

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

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

然后使用图像的buttonImage属性,正常情况下:

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

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

答案 1 :(得分:23)

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 :(得分:23)

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

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

您可以将日期选择器附加到您的图标(在我的情况下通过CSS在A标签内),如下所示:

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

答案 3 :(得分:8)

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

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

答案 4 :(得分:3)

HTML:

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

CODE:

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

答案 5 :(得分:2)

具有隐藏的输入字段会导致datepicker对话框定位出现问题(对话框水平居中)。你可以改变对话框的边距,但有更好的方法。

只需创建一个输入字段,然后&#34;隐藏&#34;它将它的不透明度设置为0并使其宽度为1px。同时将其放置在按钮附近(或下方),或者您希望出现日期选择器的位置。

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

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');
   });
});

注意:未经过所有浏览器的测试。

答案 6 :(得分: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'
  });
});

以上代码属于this link

答案 7 :(得分: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函数来完成的。