zoukankan      html  css  js  c++  java
  • 利用JS 阻止表单提交

    情景一:不存在Ajax异步操作

     1 使用背景:会议室预定管理系统中,当表单提交的时候需要验证预约的时间是否符合预定规则(不需要通过访问服务器),否则提示错误信息,阻止表单提交。

     2 相关技术点:

    form的两个事件

    1. submit,提交表单,如果直接调用该函数,则直接提交表单
    2. onSubmit,提交按钮点击时先触发,然后触发submit事件。如果不加控制的话,默认返回true,因此表单总能提交。

    3 Demo

    页面代码:

    1 @using (Html.BeginForm(null, null, null, FormMethod.Post, new { onSubmit = "returncheck();" }))  // 注意:此处事件的写法:onsubmit = "return + 事件名()"
    2  { 
    <input type="text" name="name"> 3 <input type="submit" value="提交"> 4 }

    JS代码:

    function check(){
        if (document.testform.name.value=="admin")    {        
            alert("姓名不正确");        
            return false;    
            }
        else{
            return true;
            }
    }

    情景二:需要Ajax异步操作

    1 使用背景:会议室预定管理系统中,当表单提交的时候需要验证预约的时间是否符合预定规则(需要通过访问服务器数据判断),否则提示错误信息,阻止表单提交。

     2 相关技术点: 

    在下面的例子中,通过onsubmit() 方法阻止提交无效的,因为,  JS 中 Ajax 部分与 其他部分是异步进行的,或者说同时进行,代码执行(过程A)1/5行后直接执行23行,与此同时(过程B)6/22行也在进行,显然过程B的执行进度会慢,所以还没有等到判断返回值,A就已经执行完毕,默认Str是true,所以ajax中的判断是无效的。

    示例:   Javascript代码:

     1    $("#save").click(function mysubmit() {
     2             var str;
     3             var startime = $("#datetime1").val();
     4             var endtime = $("#datetime2").val();
     5             var num = $("#mark").val();
     6             $.ajax({
     7                 type: "POST",
     8                 url: "/MeettingRoom/meetting",
     9                 data: { strattime: startime, endtime: endtime, num: num },
    10                 success: function (sesponseTest) {
    11                     if (sesponseTest == "1") {
    12                         str = false;                                           
    13                         document.getElementById("metend").style.display = "block";
    14 
    15                     }
    16                     else {
    17                         str = true;                                          
    18                         document.getElementById("metend").style.display = "none";                        
    19                     }
    20                 }
    21 
    22             });
    23              return str;
    24 
    25         });   // 
    <form onsubmit = "return check()"></form>

    3 化解方法Demo:

    Javascript代码:

     1   <script>
     2         $("#save").click(function mysubmit() {
     3             var str;
     4             var startime = $("#datetime1").val();
     5             var endtime = $("#datetime2").val();
     6             var num = $("#mark").val();
     7             $.ajax({
     8                 type: "POST",
     9                 url: "/MeettingRoom/meetting",
    10                 data: { strattime: startime, endtime: endtime, num: num },
    11                 success: function (sesponseTest) {
    12                     if (sesponseTest == "1") {
    13                         str = false;                                           
    14                         document.getElementById("metend").style.display = "block";
    15                     }
    16                     else {
    17                         str = true;                                          
    18                         document.getElementById("metend").style.display = "none";
    19                         $("#form").submit();           // 将提交的进程放在判断过程中,被迫提交操作等待后台访问完毕后执行
    20                     }
    21                 }
    22 
    23             });
    24 
    25         });
    26     </script>
      <button class="btn blue" type="button"  id ="save" ><i class="icon-ok"></i>保存</button>

    2016/04/12  ------神奇的Javascript。

  • 相关阅读:
    mysql 安装
    flying-saucer-pdf使用中字符串过长换行出问题的解决办法
    杂想
    关于MATLAB实验结果求交点问题
    关于学习方向问题
    关于读取文件夹中的图片问题
    关于ROC曲线的碎碎念
    win7(64)+vs2013+opencv3.0配置的辛酸路程
    验证模式和辨识模式
    指纹识别认证
  • 原文地址:https://www.cnblogs.com/woniu-net/p/5382193.html
Copyright © 2011-2022 走看看