【问题标题】:An HTML form not functioning on mobile devices无法在移动设备上运行的 HTML 表单
【发布时间】:2017-01-04 09:56:29
【问题描述】:

我有一个简单的单字段时事通讯注册表单,其中包含一个输入字段和一个提交按钮。我使用<a> 标记并将onclick 属性设置为javascript 函数,该函数强制对“必填”字段进行HTML5 检查并提交表单。此设置适用于桌面设备,但完全不适用于移动设备,我不确定为什么。

这是我正在使用的精简 HTML 和 JavaScript 文件:

newsletterForm.html

<form action="formSubmit.php" method="POST">

    <label for="emailfield">Email here:</label>
    <input type="text" name="email" id="emailfield" required>

    <input type="submit" name="submit" id="submithandler" style="position:absolute;top:0;left:-9999px;width:1px;height:1px>
    <a onclick="submitform();">Sign up</a>

</form>

handleforms.js

function submitform() {

    document.getElementById('submithandler').click();
}

我使用&lt;a&gt; 标记是因为我想使用不适用于&lt;input type='submit'&gt; 标记的特殊样式,但如果有办法在提交按钮上强制使用样式,那就太好了。

当用户点击按钮或链接时,它应该模拟点击&lt;input type='submit'&gt; 表单元素,以强制对“必填”输入字段进行 HTML5 检查。

什么会阻止此设置在移动设备上运行,我该如何解决?

我愿意接受有关我的代码的批评和批评,我希望向任何愿意教书的人学习。

【问题讨论】:

    标签: javascript html forms


    【解决方案1】:

    试试下面的代码就行了

    <form action="formSubmit.php" method="POST" id="myform">
    
    <label for="emailfield">Email here:</label>
    <input type="text" id="emailfield" required>
    
    <input type="submit" id="submithandler" style="position:absolute;top:0;left:-9999px;width:1px;height:1px>
    <a onclick="submitform();">Sign up</a>
    
    </form>
    
    
    function submitform() {
    
    document.getElementById('myform').submit();
    }
    

    【讨论】:

    • 你能提供它为什么有效吗?不仅仅是答案。谢谢
    • 如果用户触发了点击事件肯定会起作用,但是如果脚本触发点击事件可能并非在所有情况下都起作用,因为有些浏览器会想到脚本中的蠕虫和病毒,它会不触发处理程序。而且在 Jquery 中还有 $(elem).click();不会保证但 $(elem).trigger("click");在某些情况下会起作用。
    • 我主要担心的是 `$(elem).submit() 不会触发 HTML5 自动处理必填字段。你知道这是怎么做到的吗?
    • 简短的回答是使用 js 函数通过提交绕过奇怪的移动默认设置;最佳答案兄弟
    • 虽然提交输入元素显示为一个按钮,但它不同。因此 onClick 操作可能不起作用。或以其他方式将其更改为按钮并使用 onSubmitHandelr
    【解决方案2】:

    您需要将name 属性添加到所有输入字段。否则无法提交表单。

    <form action="formSubmit.php" method="POST">
    
        <label for="emailfield">Email here:</label>
        <input type="text" id="emailfield" required name="emailfield">
    
        <input type="submit" id="submithandler" style="position:absolute;top:0;left:-9999px;width:1px;height:1px" name="submit">
        <a onclick="submitform();">Sign up</a>
    
    </form>
    

    【讨论】:

    • 我的原始代码在所有&lt;input&gt; 标签上都设置了name 属性,并且工作正常。主要问题仍然存在。
    【解决方案3】:

    点击事件在 iOS 和某些手机浏览器上不起作用,您必须使用 touchstart、touchmove 和 touchend 事件来判断用户是否点击了屏幕。

    代码:

     <script>
           var tap = true;
           document.addEventListener('touchstart',function(e) {
              tap = true;
           });
           document.addEventListener('touchmove',function(e) {
             tap = false;
           });
           document.addEventListener('touchend',function(e) {
              if(tap) {
                 //users tapped the screen
              }
           });
        </script>
    

    类似的东西

    【讨论】:

      【解决方案4】:

      这些不是 HTML 表单的有效用途。我们应该根据它们的标准行为来使用它们。

      使用 onsubmit 属性而不是绑定点击事件。这也将像设备中的魅力一样发挥作用。只需确保您已将 type="submit" 写入提交按钮即可。

      <form action="formSubmit.php" onsubmit="myFunction()">
         Enter name: <input type="text" name="fname">
         <input type="submit" value="Submit">
      </form>
      
      <script>
        function myFunction() {
          alert("The form was submitted");
        }
      </script>
      

      【讨论】:

        【解决方案5】:

        试试下面给出的代码:

        它还将禁止点击移动设备上的表单提交

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        <form action="formSubmit.php" method="POST">
        <label for="emailfield">Email here:</label>
        <input type="text" id="emailfield" required>
        <input type="submit" id="submithandler" style="position:absolute;top:0;left:-9999px;width:1px;height:1px;">
        <a id="Submit_Form" style="cursor: pointer;">Sign up</a>
        </form>
        <script>
        $( document ).ready(function() {
            $('#Submit_Form').on("click",function(){
             var isMobile = window.matchMedia("only screen and (max-width: 760px)");
             if (isMobile.matches) 
             {
                 $('#submithandler').prop('disabled', true);
             }
             else
             {
                 $('#submithandler').click();
             }
          }); 
        });
        </script>
        

        有一个内置的 JavaScript API 用于检测媒体。以下几行适用于平板电脑和手机屏幕,它将禁用点击手机和平板电脑上的提交按钮:

        var isMobile = window.matchMedia("only screen and (max-width: 760px)");
        if (isMobile.matches) 
        {
        $('#submithandler').prop('disabled', true);
        }
        

        希望这个答案对你有帮助!

        【讨论】:

        • 所以,当我阅读代码时,如果检测到移动设备,它将禁用&lt;input type="submit"&gt; 标签,否则(如果它是桌面设备)它将模拟点击@987654324 @ 标记并提交表单。如果是移动设备,表单如何提交?
        猜你喜欢
        • 1970-01-01
        • 2016-12-18
        • 2014-08-30
        • 2017-01-28
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        相关资源
        最近更新 更多