获取iPhone GO按钮以提交表单

时间:2011-04-14 14:59:17

标签: iphone html forms keyboard

是否有人知道哪些变量进入表单以使iPhone虚拟键盘的GO按钮提交表单与否?

我一直在努力缩小方案,这就是我发现的:

  • 如果FORM只有一个用户输入字段,则go按钮会自动提交表单

  • 如果FORM有多个用户输入字段,但没有INPUT TYPE =“SUBMIT”,那么GO按钮不会提交表单。

  • 如果FORM有多个用户输入字段并且INPUT TYPE =“SUBMIT”,那么go按钮会提交表单。

然而,这并不完全准确,因为我们遇到了第三种情况不适合我们的情况。

是否有人知道GO按钮工作的其他因素与不工作?

9 个答案:

答案 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元素的typesearch,则返回键的标签为search
  • type属性的任何其他值都将导致返回键的标签为go

存在INPUT设置为BUTTON的{​​{1}}或type元素似乎不会影响返回键标签。 (尽管出于可访问性目的而包含一个是一个好主意。)