Html input 常见问题

1.input回车事件不执行导致页面刷新

场景:在文本框中输入关键字按回车,页面自动刷新了

<form name="keywordForm" method="post" action="">  
<p id="profile_nav">  
<label for="profile"> 关键字搜索: </label>  
<input style="width:80; height:20" type="text" name="keyword" onkeypress="searchKeywordKeyboard(event)" />  
<input type="button" value="搜索" onClick="searchKeyword()">  
</p> 
</form>

解决方法1:

  一个表单下,如果只有一个文本框时,按下回车将会触发表单的提交事件。  既然是只有一个文本框才会出问题,那么可以加一个隐藏的文本框

解决方法2:(推荐)

  <form name="keywordForm" method="post" action="" onsubmit="return false;">  就是在表单 form 后面加上一个 onsubmit 事件,返回 false,来阻止 form 提交。

 解决方法3:(不推荐)

document.onkeydown=function(e){
        var e = e || event;
        var currKey = e.keyCode || e.which || e.charCode;//支持IE,FireFox
        if (currKey == 13) {
            return false;
        }
    }

解决方法4:

<input type="text"  onkeydown="return ClearSubmit(event)" />
 function ClearSubmit(e) {
      if (e.keyCode == 13) {
         return false;
      }
   }

 

2.表单校验之datatype

  凡要验证格式的元素均需绑定datatype属性,datatype可选值内置有10类,用来指定不同的验证格式。

  如果还不能满足您的验证需求,可传入自定义datatype,可绑定的附加属性有:datatype、nullmsg、sucmsg、errormsg、ignore、recheck、tip、altercss、ajaxurl 和 plugin等.

  内置基本的datatype类型有: * | *6-16 | n | n6-16 | s | s6-18 | p | m | e | url

  5.2版本之后,datatype支持规则累加或单选。用","分隔表示规则累加;用"|"分隔表示规则多选一,即只要符合其中一个规则就可以通过验证,绑定的规则会依次验证,只要验证通过,后面的规则就会忽略不再比较。

  5.2.1版本之后,datatype支持:直接绑定正则:如可用这样写datatype="/\w{3,6}/i",要求是3到6位的字母,不区分大小写;

   

  http://deerchao.net/tutorials/regex/regex.htm#lookaround

  参考链接:http://blog.csdn.net/zhangdaiscott/article/details/26375043

 

3.html5 原生表单验证

  html5 原生表单验证 + ajax 提交 无需任何第三方验证框架 通过pattern 和 oninvalid 属性统一验证表单 。

  oninvalid:提交的input元素的值为无效值时(这里是正则验证失败),触发oninvalid事件。oninvalid属于Form 事件。

  setCustomValidity():这个是HTML5内置的JS方法,用来自定义提示信息

  pattern 属性规定用于验证输入字段的正则表达式。

  注释:pattern 属性适用于以下 <input> 类型:text, search, url, telephone, email 以及 password 。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <form action="#" method="post" onsubmit="return false">
            <input type="text" name="mobile" id="mobile" placeholder="请输入手机号码"
        pattern="^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$"  oninvalid="validateIt(this,'手机号码格式错误')" oninput="validateIt(this,'手机号码格式错误')" required/>

            <input type="text" name="age" id="address"  placeholder="请输入地址"
            pattern="^.{5,200}$"  oninvalid="validateIt(this,'地址不符合规范')" oninput="validateIt(this,'地址不符合规范')" required/>
            <button type="submit" id="submit" >提交</button>
        </form>

    </body>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
       function validateIt(inputelement,errMsg){
          if(inputelement.validity.patternMismatch){
              inputelement.setCustomValidity(errMsg);
              }else{
              inputelement.setCustomValidity(''); //输入内容符合验证条件
           }
          return true;
        }
        $(function() {
    if ($("*:invalid") == 0) { // 如果验证都通过
        $("#submit").submit(function() {
            $.ajax({
                type: "post",
                url: "你的地址",
                data: $("form").serialize(),
                async: true,
                success: function(data) {
                    alert(data);
                },
                dataType: "json" // json 格式的返回值
            });
        });

    }
});
    </script>

 

  参考:

  http://blog.csdn.net/xiawu1990/article/details/49893473

  http://blog.csdn.net/qq_21707807/article/details/53035977

  http://blog.csdn.net/teresa502/article/details/8524184

 

 

 

 

posted @ 2017-07-27 14:27  心存善念  阅读(690)  评论(0编辑  收藏  举报