【问题标题】:Why submit input by clicking the enter button not work on mobile phone browsers?为什么点击回车按钮提交输入在手机浏览器上不起作用?
【发布时间】:2022-01-21 22:03:59
【问题描述】:

我遇到了一个奇怪的问题。我想通过单击输入按钮来搜索产品。我使用e.which == 13 || e.which == 10keypress keyup 触发器,如下所示。

<form id="fform" method="get" autocomplete="off" action="/search">
<div class="search-inner-container">
    <button @if(isListing) { id="buttonSearchTextListing" } aria-label="unf-search-btn" type="submit"
        class="search-button search-keyword" value="Search"></button>
    <input
            style="cursor: text;"
        @if(isListing) {
            form='fform'
            onclick="!this.form && document.getElementById('fform').submit()"
            name="srp-searchText"
        } else {
            name="srp-searchText"
        }
        id="searchbar-top"
        autocomplete="off"
        type="searchText" class="searchbar-text search-input bt1 @uuid" aria-label="Search"
            value="@text" placeholder='@l("searchBar.buttonLabel")'
                hx-get="/search-autocomplete"
                hx-vars="'srp-userInput': getSearchbarVal()"
                hx-trigger="keyup changed delay:500ms"
                hx-target=".searchbar-suggestion-container"/>
                <!-- hx-trigger="keyup changed delay:500ms, focus changed delay:500ms" -->

</div>
</form>
$('.searchbar-text').each(function(){
    $(this).on("keyup keypress", function(e) {
        if(e.which == 13 || e.which == 10) {
            // code
        }
    });
})

我已经在我的笔记本电脑浏览器(chrome 和 Mozilla Firefox)上尝试过这个。我尝试在桌面/移动显示器上使用元素检查器,它工作正常。但是当我在手机浏览器上尝试时,它不起作用。当我按下回车键时,它会跳转到另一个部分并且不提交表单。这只发生在手机的产品搜索页面上,但在其他页面上,它可以正常工作。

*我尝试在主页上显示 keyCode 为 13 时在警报上调试单击的 keyCode,但在产品搜索中未出现警报键码

如果你想尝试,就从我开发的一个网站HERE测试,然后在桌面-手机浏览器中搜索(例如saw)并点击进入

谁能解释为什么会这样?

【问题讨论】:

  • 不确定这是什么,我知道不是 - HTML
  • Jon P 刀片语法,例如,包括对内联 if 语句的 @if 的使用,并且它的核心都是 HTML,还有另一种未标记的语言使用,但您应该查看 Laravel 的 HTML还有 Ionic 的 HTML 等等,你会看到它在其他语言/库/框架中是如何演变的
  • 这是htmx @JonP
  • @RelebohileNkosi,它的核心不是 HTML。它是呈现 HTML 的其他东西。它是什么,很重要,许多框架(角度、vuejs 等)反对 推荐使用 jquery,当它不是普通的旧 html 时,确切地知道我们正在处理的内容很重要。例如hx-trigger="keyup changed delay:500ms"如何与$(this).on("keyup keypress"交互??
  • 我在我的手机 (android) 浏览器上试用了您的网站,它已经对我很好。我可以通过按手机键盘上的回车键进行搜索。我认为你应该在你的开发服务器上的按键上添加一个警报,然后在它不适合你的手机上尝试它,以确保该手机是否发送了你所期望的相同的密钥代码。

标签: javascript jquery htmx


【解决方案1】:

只需将type='submit' 设置为按钮并设置为无显示。确保将输入字段和按钮包装在表单标签中。然后处理提交。

<form>
  <input type='text' placeholder='Search for an item'>
  <button type='submit'>Search</button>
</form>

【讨论】:

  • 我有type="submit" 的按钮。这是我的按钮 => &lt;button aria-label="unf-search-btn" type="submit" class="search-button search-keyword" value="Search"&gt;&lt;/button&gt;
【解决方案2】:

首先,

使用UIEvent.which 似乎是“非标准”。请改用KeyboardEvent.keyCode
此外,“type=submit”不起作用的原因是您在&lt;button&gt; 元素上使用了它。从技术上讲,它们不是“输入”,因此您可以在其上使用 type

如果您尝试使用 &lt;input&gt; 元素,它应该可以正常工作。像这样的东西应该可以工作:

<input aria-label="unf-search-btn" type="submit" class="search-button search-keyword" value="Search"/>

然后假设您设置了&lt;form&gt; 元素,它应该可以正常工作。

【讨论】:

  • 我有表格。但是为什么这只发生在手机浏览器中呢?如果我使用带有移动视图的检查元素,它可以工作。所以我很难调试它。许多人建议使用e.which而不是e.keyCode
  • 不正确,e.which 比 e.keyCode 差。您可以在 MDN 上看到 e.which 是非标准的,不应使用,因为有更好的选择。此外,问题可能是 e.which 在移动浏览器上不起作用(我对此表示怀疑),或者键码有点不同。尝试使用 &lt;input&gt; 元素和 type=submit 代替。您的问题应该立即得到解决。 (如果是,记得接受答案)
  • 您确定要在输入中添加类型吗?因为如果我这样做的话,如果我想填写输入它将直接提交无法输入任何内容
  • 是的,我确定。当你添加“type=submit”时,它变成了一个提交按钮
【解决方案3】:

您的代码在我的手机中完全符合您的要求,请尝试将return false; 放在输入提交中

$('.searchbar-text').each(function(){
        $(this).on("keyup keypress", function(e) {
            if(e.which == 13 || e.which == 10) {
            console.log('Submitted');
            }else{
            console.log(e.which);
            }
            return false;
        });
    });

【讨论】:

  • 认真的吗?你能记录下你的步数吗?
  • 我添加了return false;,但仍然无法正常工作
  • 不要返回 false,因为这样做会阻止在搜索框中输入任何内容
【解决方案4】:

您可能还需要添加e.preventDefault()。编辑:然后$("#fform").submit()

【讨论】:

  • 如果我这样做了,就没有什么行动了吗?
  • 是的,对不起。我想你也会提交表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 2014-12-17
  • 2022-01-18
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多