jQuery的日期选择器:单击日期时,为防止关闭选择器(jQuery Datepicker: Pre

2019-06-18 06:10发布

喜研究员计算器:ERS,

我使用jQuery的日期选择器插件 ,再加上马丁Milesich Timepicker插件。 除了事实,点击在日期选择器的日期,关闭小工具,让我们没有时间来接的时候一切都很正常。

问:所以我想知道如果有一种方法,以防止部件从关闭点击日期时,而是强迫用户点击“完成”按钮(显示了启用“showButtonPanel:真正的”当选项),或点击小部件之外。 我不希望我的用户不必打开窗口小部件的两倍! 看到的行为在网上的timepicker演示

任何解决这个问题,或者在正确的方向,甚至三分球帮助表示赞赏!

更多信息:我使用的是从马丁斯下载链接提供的文件: http://milesich.com/tpdemo/timepicker-0.2.0.zip

  • jQuery的UI,1.7.2.custom.min.js
  • timepicker.js(最新版本0.2.0)

这是我使用的选项:

$(document).ready(function(){
    $(".datepicker").datepicker({
        duration: '',  
        showTime: true,  
        constrainInput: false,  
        stepMinutes: 5,  
        stepHours: 1, 
        time24h: true,
        dateFormat: "yy-mm-dd",
        buttonImage: '/static/images/datepicker.png',
        buttonImageOnly: true,
        firstDay: 1,
        monthNames: ['Januari','Februari','Mars','April','Maj','Juni','Juli','Augusti','September','Oktober','November','December'],
        showOn: 'both',
        showButtonPanel: true
     });
})

Answer 1:

而不是改变源,最好使用现有的事件

onSelect: function() {
    $(this).data('datepicker').inline = true;                               
},
onClose: function() {
    $(this).data('datepicker').inline = false;
}


Answer 2:

作为参考,既然人都问过我这个通过邮件。 下面是需要添加到timepicker.js一个代码块:

/**
 * Don't hide the date picker when clicking a date
 */
$.datepicker._selectDateOverload = $.datepicker._selectDate;
$.datepicker._selectDate = function(id, dateStr) {
    var target = $(id);
    var inst = this._getInst(target[0]);
    inst.inline = true;
    $.datepicker._selectDateOverload(id, dateStr);
    inst.inline = false;
    this._updateDatepicker(inst);
}

祝你好运得到它在您的网站的工作!



Answer 3:

你将不得不自己破解日期选择器。 这是它使用的代码。 如果没有内联,当你选择一个日期,它会隐藏。

你可以通过在你自己的ONSELECT方法和快速更改日期选择器实例是直列再改回来,而无需更改日期选择器内部,但它是一个非常哈克解决方案。

if (inst.inline)
        this._updateDatepicker(inst);
else {
      this._hideDatepicker(null, this._get(inst, 'duration'));
      this._lastInput = inst.input[0];
      if (typeof(inst.input[0]) != 'object')
      inst.input[0].focus(); // restore focus
      this._lastInput = null;
}


Answer 4:

这里是一个解决方案:

onSelect: function ( dateText, inst ) {
    ..... // Your code like $(this).val( dateText );`


    //Set inline to true to force "no close"
    inst.inline = true;
},
onClose: function(date,inst){
    //Set inline to false => datapicker is closed
    // onClose is called only if you click outside the datapicker, onSelect will not
    // trig onClose due to inline = true
   inst.inline = false;
}

`



Answer 5:

为什么所有评论提供解决方法吗? 它是straigtfarword:

使用内联日历altField :)

    <input type="text" id="alternate" size="30" />
    <div id="datepicker"></div>

    <script>
       $("#datepicker").datepicker({
          altField: "#alternate"
       });
    </script>

检查此琴: http://jsfiddle.net/menocomp/y2s662b0/1/



Answer 6:

酷,如果你正在使用jQuery-UI-1.8.5.custom.min.js和jQuery-ui.multidatespicker.js,你可以修改的jQuery-UI-1.8.5.custom.min.js:来自:

if(a.inline)this._updateDatepicker(a);

成:

if(a.inline || !this._get(a, 'closeOnSelect'))this._updateDatepicker(a);


Answer 7:

这口井的肮脏的解决办法......但它为我的作品......即使showButtonPanel:真

  $(function() {
    var dp_c = null, dp_once = false;
    $( '#datepicker' ).datepicker({
      showButtonPanel: true,
      onSelect: function() {
        $(this).data('datepicker').inline = true;  
        setTimeout(function () {
          $('#ui-datepicker-div').find('.ui-datepicker-buttonpane').append(dp_c);
        }, 1);

      },
      onClose: function() {
        $(this).data('datepicker').inline = false;
      }
    }).click(function () {
      if(!dp_once) {
        setTimeout(function () {
          dp_c = $('#ui-datepicker-div').find('.ui-datepicker-close').clone();
        }, 500);
        dp_once = !!1;
      }
    });

    $('#ui-datepicker-div').on('click', '.ui-datepicker-close', function () {
      $('#datepicker').datepicker( "hide" );
    });

  });


Answer 8:

你应该重写本地js函数:

 /* Update the input field with the selected date. */
        _selectDate: function(id, dateStr) {
            var target = $(id);
            var inst = this._getInst(target[0]);
            dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
            if (inst.input)
                inst.input.val(dateStr);
            this._updateAlternate(inst);
            var onSelect = this._get(inst, 'onSelect');
            if (onSelect)
                onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
            else if (inst.input)
                inst.input.trigger('change'); // fire the change event
            if (inst.inline)
                this._updateDatepicker(inst);
            else {
                if(inst.settings.hideOnSelect != false){
                    this._hideDatepicker();
                }
                this._lastInput = inst.input[0];
                if (typeof(inst.input[0]) != 'object')
                    inst.input.focus(); // restore focus
                this._lastInput = null;
            }
        },

并添加相应的选项来配置日期选择器,如例如:

var defaultDatePickerOptions = {
        hideOnSelect: false,
        ...
    }; 
 var birthDate = jQuery.extend({}, defaultDatePickerOptions);
 $('#birthdate').datepicker(birthDate);


Answer 9:

什么埃米尔建议之后,我发现修改控件以支持在特定事件不关闭小部件一个更好和更简单的方法。

首先,我添加了另一个属性与dict对插件的默认设置:

closeOnSelect:true //True to close the widget when you select a date

其次,发现在_selectDate方法这样的说法:

if (inst.inline)
        this._updateDatepicker(inst);
else {
        ...
    }

和更改条件是这样的:

var closeOnSelect = this._get(inst, "closeOnSelect");        
if (inst.inline || !closeOnSelect)
        this._updateDatepicker(inst);
else {
        ...
    }

给它一个尝试,它为我工作。 我这样做是在JQuery用户界面1.8.5版本。



文章来源: jQuery Datepicker: Prevent closing picker when clicking a date