jQuery datepicker - 在init之后更改.ui-datepicker-calendar的显示

bos*_*chi 4 css jquery datepicker

在初始化datepicker之后,如何更改ui-datepicker-calendar类的css display属性?我有一个带有可选复选框的html表单,我想从中切换此表的显示.我尝试过以下方法:

HTML示例:

 <div class="row">
  <div class="adddescr"><label for="date">Zeitraum:</label></div>
  <div class="addinput" id="date"><input type="text" id="datefrom" name="datefrom" class="date" /> - <input type="text" id="dateto" name="dateto" class="date" /></div>
 </div>
 <div class="row">
  <div class="addinput"><label><input type="checkbox" id="dateplanedcheck" /> grobe Planung</label></div>
 </div>
Run Code Online (Sandbox Code Playgroud)

JS第一种方法:

 <script>
  $(document).ready(function() {
   $("#datefrom, #dateto").datepicker({ dateFormat: "dd.mm.yy",

   [...]

    beforeShow: function(input, inst) {
     if ($("#dateplanedcheck").is(':checked')) {
      $(".ui-datepicker-calendar").css("display", "none");
    }}
   });

   [...]

  });
 <script>
Run Code Online (Sandbox Code Playgroud)

调用beforeShow,但仍然显示日历.

JS第二种方法:

 <script>
  $(document).ready(function() {

  [....]

   $("#dateplanedcheck").change(function() {
    if ($(this).is(':checked')) {
      $(".ui-datepicker-calendar").css("display", "none");
    }
   });
  });
 </script>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?这甚至适用于jQuery吗?提前致谢!

Ben*_*nno 6

因此,如果选中复选框,您是否希望不显示日历?

只是return false;在beforeShow.

$("#datefrom, #dateto").datepicker({
    dateFormat: "dd.mm.yy",
    beforeShow: function(input, inst) {
        if ($("#dateplanedcheck").prop('checked')) {
            return false;
           }

    }
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/JzbPD/

回答:

仍然显示日历但使其不可见:

BeforeShow无法访问表上的ui-datepicker-calendar,因为它尚未呈现.应用类似的类$(inst.dpDiv).addClass('calendar-off'),然后使用这样的样式.calendar-off table.ui-datepicker-calendar { display none; }:http://jsfiddle.net/JzbPD/4

  • 好的 - 从我所知道的,在BeforeShow中你无法访问桌面上的ui-datepicker-calendar,因为它还没有被渲染.您可以做的是应用类似`$(inst.dpDiv).addClass('calendar-off')`的类,然后使用样式`.calendar-off table.ui-datepicker-calendar {display none; 这样?http://jsfiddle.net/JzbPD/4/ (2认同)
  • @Benno ......很棒的答案.特别是因为它显示了如何在同一页面上具有多个不同的外观. (2认同)