如何在iOS WebView中仅关闭ID为eventdatetime的输入框系统键盘?
解决方案:仅禁用特定输入框的iOS系统键盘
当然可以实现这个需求!针对你的场景,有两种比较靠谱的方案,根据你的实际情况选择就行:
方案一:网页端(JavaScript)直接处理(推荐,因为是自有网站)
既然是你自己的网站,直接修改前端代码是最直接高效的方式,不会涉及iOS端的复杂逻辑。我们只需要阻止eventdatetime这个输入框获得焦点时触发系统键盘,同时不影响jQuery日期选择器的正常使用:
两种实现方式:
方式1:设置输入框为只读
只读状态的输入框无法获得焦点,自然不会弹出系统键盘,但完全不影响点击触发日期选择器:$(document).ready(function() { $('#eventdatetime').prop('readonly', true); });方式2:拦截焦点事件并手动触发日期选择器
如果不想设置只读(比如需要保留输入框的视觉状态),可以拦截焦点事件的默认行为,同时直接唤起日期选择器:$(document).ready(function() { $('#eventdatetime').on('focus', function(e) { // 阻止默认的焦点行为,避免弹出键盘 e.preventDefault(); // 手动触发jQuery日期选择器 $(this).datepicker('show'); }); });
方案二:iOS端(Objective-C)通过WebView代理注入JS
如果暂时不想修改网页代码,可以在iOS端通过WebView的代理方法,在页面加载完成后注入一段JS代码来实现同样的效果:
如果你用的是UIWebView:
首先设置WebView的代理,然后在页面加载完成后注入JS:
// 先设置代理 self.webView.delegate = self; // 页面加载完成时注入JS - (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *disableKeyboardJS = @"$(document).ready(function() { $('#eventdatetime').prop('readonly', true); });"; [webView stringByEvaluatingJavaScriptFromString:disableKeyboardJS]; }
如果你已经升级到WKWebView(更推荐,UIWebView已被废弃):
同样在页面导航完成后注入JS:
// 设置代理 self.wkWebView.navigationDelegate = self; // 页面加载完成时注入JS - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { NSString *disableKeyboardJS = @"$(document).ready(function() { $('#eventdatetime').on('focus', function(e) { e.preventDefault(); $(this).datepicker('show'); }); });"; [webView evaluateJavaScript:disableKeyboardJS completionHandler:^(id _Nullable result, NSError * _Nullable error) { if (error) { NSLog(@"注入JS失败: %@", error.localizedDescription); } }]; }
注意事项:
- 确保网页中的jQuery已经加载完成再执行上述JS代码,所以放在
$(document).ready回调里是最稳妥的,避免出现找不到元素的情况。 - 测试时记得点击
eventdatetime输入框,确认日期选择器正常弹出,同时系统键盘不会出现;再测试其他输入框,确保它们的键盘弹出功能不受影响。
内容的提问来源于stack exchange,提问作者hesje
相关产品推荐
相关产品推荐

