是否有人知道哪些变量进入表单以使iPhone虚拟键盘的GO按钮提交表单与否?
我一直在努力缩小方案,这就是我发现的:
如果FORM只有一个用户输入字段,则go按钮会自动提交表单
如果FORM有多个用户输入字段,但没有INPUT TYPE =“SUBMIT”,那么GO按钮不会提交表单。
如果FORM有多个用户输入字段并且INPUT TYPE =“SUBMIT”,那么go按钮会提交表单。
然而,这并不完全准确,因为我们遇到了第三种情况不适合我们的情况。
是否有人知道GO按钮工作的其他因素与不工作?
答案 0 :(得分:49)
所以,这是我们的具体问题:
我们有一个包含多个用户输入字段的表单,但不是真正的<input type="submit">
(它是通过JS提交的)。
因此,GO按钮什么也没做。
然后我们添加了<input type="submit">
并将其设置为display: none
,希望能够解决这个问题。不。没用。
一时兴起,我们将display:none更改为margin-left: -1000px
那很有用!
显然,Safari正在寻找表单中存在SUBMIT按钮,并且只有当它不显示时才会显示:none,然后当你点击GO按钮时它会触发它。
答案 1 :(得分:21)
如果有多个输入并且您想要隐藏提交,那么最好的似乎是:
<input type="submit" style="visibility:hidden;position:absolute"/>
答案 2 :(得分:3)
您还可以将按键侦听器绑定到元素或表单。 iphone&#34; Go&#34;按钮与计算机上的enter按钮相同,为char 13.
$('someElem').bind("keypress", function(e){
// 'Go' key code is 13
if (e.which === 13) {
console.log("user pressed Go");
// submit your form with explicit JS.
}
});
答案 3 :(得分:2)
我无法弄清楚为什么一个非常简单的谷歌地图表格没有使用iPhone Go按钮提交。
结果表明,在删除它之后,它不能与表单标记上的target="_blank"
一起使用。
删除了,现在Go按钮适用于iPhone。
这是JSFiddle尝试
答案 4 :(得分:1)
The code given by the others is correct. If you are using jQuery Mobile then add
data-role="none"
to the submit input element. Like so:
<input type="submit" data-role="none" style="visibility: hidden; position: absolute;" />
答案 5 :(得分:0)
在我遇到此问题时,只需在表单标记中包含我的输入type ='search'即可。希望它也可以帮助那些遇到这个问题的人。
答案 6 :(得分:0)
以下是适用于我的提交按钮样式,页面上的副作用最小:
.... style="width: 0px ; height: 0px" ....
答案 7 :(得分:0)
要提交的GO按钮是iOS的默认行为,请勿尝试破解键盘,因为UIKeyboard是运行时标头,但是您可以在运行时为HTML注入JS并防止GO按钮的行为(GO就像Enter键一样) ),
尝试一下
WKWebView *webView;
WKUserContentController *contentController = [[WKUserContentController alloc] init];
NSString *script1 = @"var isEnter = false;";
WKUserScript *userScript1 = [[WKUserScript alloc] initWithSource:script1 injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:false];
[contentController addUserScript:userScript1];
NSString *script2 = @"function captureGoKey(e){if(isEnter){e.preventDefault();}isEnter = false;}";
WKUserScript *userScript2 = [[WKUserScript alloc] initWithSource:script2 injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:false];
[contentController addUserScript:userScript2];
NSString *script3 = @"var form = document.getElementsByTagName('form')[0];";
WKUserScript *userScript3 = [[WKUserScript alloc] initWithSource:script3 injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:false];
[contentController addUserScript:userScript3];
NSString *script4 = @"document.onkeypress = function(e){if(e.keyCode == 13){isEnter = true;}}";
WKUserScript *userScript4 = [[WKUserScript alloc] initWithSource:script4 injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:false];
[contentController addUserScript:userScript4];
NSString *script5 = @"if(form.attachEvent){form.attachEvent('submit', captureGoKey);}else{form.addEventListener('submit', captureGoKey);}";
WKUserScript *userScript5 = [[WKUserScript alloc] initWithSource:script5 injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:false];
[contentController addUserScript:userScript5];
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
config.userContentController = contentController;
webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
答案 8 :(得分:0)
在撰写本文时(2019年11月19日),在iOS 13.1.3上,以下情况更改了return
键标签:
INPUT
元素必须包装在FORM
元素中,并且FORM
元素必须具有action
属性。 (它可以是一个空字符串,即action=""
。)INPUT
元素的type
为search
,则返回键的标签为search
。type
属性的任何其他值都将导致返回键的标签为go
。存在INPUT
设置为BUTTON
的{{1}}或type
元素似乎不会影响返回键标签。 (尽管出于可访问性目的而包含一个是一个好主意。)