禁用 jQuery UI 日期选择器的焦点设置

Posted

技术标签:

【中文标题】禁用 jQuery UI 日期选择器的焦点设置【英文标题】:Disable setting of focus for jQuery UI datepicker 【发布时间】:2011-08-02 12:13:43 【问题描述】:

jQuery UI 日期选择器有一个选项可以仅在单击按钮图像时打开日期选择器。请参阅以下示例:

http://jqueryui.com/demos/datepicker/#icon-trigger

问题在于,只要打开日期选择器,焦点就在文本字段中。是否可以禁用焦点设置?

在 iPhone 等移动设备上使用上述页面时,键盘会弹出,因为文本字段获得焦点。这并不是真正的用户友好,因为您必须关闭键盘才能真正进入日期选择器并使用它...

【问题讨论】:

替代方案:DateBox - dev.jtsage.com/jQM-DateBox 【参考方案1】:

将输入设置为只读

<input type="text" id="datePicker" readonly>

【讨论】:

例如:jquery.ui.datepicker.min.js #booking-datepicker 会以只读方式触发点击事件,但 #booking-timepicker 没有。您可以添加 $('input').on('click', function() $(this).removeAttr('readonly'); $(this).trigger('click'); ); 工作正常,并带有一点 css 魔法,它看起来像一个以指针为光标的普通输入字段。谢谢你米哈尔舒尔曼!【参考方案2】:

如果您禁用输入,则键盘永远不会弹出。喜欢...

    <input type="text" id="date_picker_field" name="date" disabled/>

【讨论】:

但是在提交表单时没有提交禁用的字段。 你可以在调用.datepicker('show')之前和之后调用.attr('disabled and .removeAttr('disabled')【参考方案3】:

通过将 datepicker showOn 选项设置为“none”来获得所需的结果。

$(#startdate").datepicker(
    defaultDate : "+7d",
    minDate: "+7d",
    changeMonth : true,
    changeYear : true,
    yearRange : "c:c+1",
    numberOfMonths : 1,
    showOn: "none",
    dateFormat : "dd-MM-yy",
    onClose : function(selectedDate) 
        $("#startdate").val(selectedDate);
        $( "#enddate" ).datepicker( "option", "minDate", selectedDate );
    
);

datepicker 实现理解 showOn 选项的“focus”、“button”和“both”值。默认设置为“焦点”。因此,从技术上讲,传递除这 3 个以外的任何值都应该有效。 不过需要注意的是,一旦默认功能被覆盖,管理日期选择器日历的正确显示的责任就落在了您身上。

【讨论】:

【参考方案4】:

这是一个较老的问题,但是如果您偶然发现它正在寻找解决相同问题的方法,我相信现代浏览器中的解决方案是在 html 输入标记中使用 inputmode="none"

<input type="text" ... inputmode="none" />

我没有对它进行广泛的测试,但它在我使用的设置下在 android 中运行良好。

【讨论】:

【参考方案5】:

如果您使用的是 jQuery Mobile-,那么您可能想要查看一些面向移动设备的日期选择器。 在尝试了其他几个之后,我正在使用实验性的jQueryUI mobile datepicker(来自 alpha 4),因为我们想要一个漂亮的日历视图。它基本上只是在现有的日期选择器之上添加了一些 css 类。我正在使用Edited 版本,因此它可以作为弹出窗口使用。为了防止键盘打开,我只需在它接收到焦点之后在显示选择器之前添加一个 jQuery 模糊事件$this.blur()。模糊事件发生得足够快,以至于键盘永远不会打开。

如果没有- 你可能想做同样的事情。不过,我不知道有一种方法可以在不编辑代码的情况下做到这一点。

【讨论】:

【参考方案6】:

我在正在处理的应用程序上遇到了同样的问题。我从我的 jQuery 文件中注释掉了这些行,以防止它在单击我的日历图标后立即自动将焦点设置在文本字段上。它适用于我的应用程序。

if ( $.datepicker._shouldFocusInput( inst ) ) 
    inst.input.focus();

【讨论】:

【参考方案7】:

我有缩小版 v1.11.4,在 jquery-ui.min.js 中找到了两次

datepicker._shouldFocusInput(t)&amp;&amp;t.input.focus()

我删除了&amp;&amp;t.input.focus(),它工作正常。

还可能感兴趣:

_shouldFocusInput:function(e)
  return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")

仍在寻找不更改核心文件的修复程序...

【讨论】:

【参考方案8】:

我在移动设备上进行测试时遇到了同样的情况,即在我选择日期之前弹出键盘/小键盘。我刚刚在里面添加了一个属性 readonly="true"

但是,请务必编辑 CSS 并指定 cursor:pointer,因为每次您将鼠标悬停在桌面视图中时它都会显示一个问号。

【讨论】:

【参考方案9】:

我找到了一种解决方法,方法是在打开日期选择器之前使用 jQuery 禁用输入字段并在 100 毫秒后启用它:

$selected = $("#datepickerInput");
$selected.prop('disabled', true);
$selected.datepicker("show");
window.setTimeout(function () 
   $selected.prop('disabled', false);
, 100);

在 Chrome 和 Android 5.1.1 上的 cordova 上测试。

【讨论】:

【参考方案10】:
$('#dateIniPick').datetimepicker(
    format: 'DD/MM/YYYY',
    ignoreReadonly: true,
    allowInputToggle: true
);

【讨论】:

以上是关于禁用 jQuery UI 日期选择器的焦点设置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React 中禁用 Material UI 的日期选择器的下划线?

jQuery UI 日期选择器的问题

jQuery UI 动态启用日期

jQuery UI Datepicker - 在 min/maxdate 中排除禁用日期

jQuery UI Datepicker - 禁用特定日期

在移动设备上禁用 Bootstrap 日期选择器的键盘弹出窗口(Rails 4,Jquery)