如何从外部JS文件禁用ASP TextBox的TimePicker点击功能?
解决ASP TextBox的TimePicker点击禁用问题
我来帮你搞定这个TimePicker禁用点击的难题,你试过的几种方法确实都有各自的局限,下面给你几个针对性的可行方案:
方案1:使用TimePicker插件自带的禁用API(最优解)
绝大多数jQuery TimePicker插件(比如jQuery UI Timepicker、Tempus Dominus这类常用的)本身就提供了官方的禁用/启用方法,这是最稳妥的方式,不会出现时间更新异常的问题。
比如如果是jQuery UI Timepicker,直接调用:
// 禁用TimePicker $('#textbox1').timepicker('disable'); // 后续需要启用的话用这个 // $('#textbox1').timepicker('enable');
这个方法会直接通过插件内部逻辑处理禁用,既阻止点击弹出选择器,又能保证控件状态和时间数据的一致性。
方案2:解绑点击事件+设置只读(兼容所有浏览器)
如果你的TimePicker插件没有提供禁用API,可以通过解绑它绑定的点击事件,同时设置控件只读来实现:
// 先解绑TimePicker绑定的所有点击相关事件 $('#textbox1').off('click mousedown'); // 绑定新的点击事件,阻止默认行为和事件冒泡,彻底阻止弹出选择器 $('#textbox1').on('click mousedown', function(e) { e.preventDefault(); e.stopPropagation(); }); // 设置控件只读,防止用户手动输入时间 $('#textbox1').prop("readonly", true);
这个方法避开了IE不支持pointer-events的问题,同时也不会像disabled那样导致时间更新异常。
方案3:用遮罩层屏蔽点击(终极兼容方案)
如果上面两种方法都不适用,那可以用一个透明遮罩层覆盖在TextBox上,物理阻止点击事件,这个方案对所有浏览器(包括老版本IE)都有效:
首先给TextBox套一个相对定位的容器:
<div style="position: relative; display: inline-block;"> <asp:TextBox ID="textbox1" runat="server"></asp:TextBox> <!-- 遮罩层默认隐藏 --> <div id="timepicker-mask" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: transparent; z-index: 1000; display: none;"></div> </div>
然后通过JS控制遮罩层的显示/隐藏:
// 禁用TimePicker点击时,显示遮罩 $('#timepicker-mask').show(); // 需要启用时隐藏遮罩 // $('#timepicker-mask').hide();
顺便说下你之前方法的问题:
$('#texbox1').attr("disabled", "disabled");:控件被禁用后,部分TimePicker插件的内部更新逻辑会因为控件状态为disabled而失效,导致时间无法正常同步。pointer-events: none;:这个CSS属性在IE11及以下版本完全不支持,所以在老IE里无效。$('#textbox1').prop("readonly", true);:readonly只是禁止用户手动输入内容,但TimePicker的点击弹出逻辑是绑定在控件上的JS事件,readonly不会阻止这些事件触发,所以选择器还是会弹出来。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

