JavaScript验证码

时间:2014-06-19 23:43:21

标签: javascript

我正在使用JavaScript来验证某些表单字段。我的问题是关于

中的代码
$("#alias").keyup(function(){

这是我的验证脚本:

<script type="text/javascript">

$(document).ready(function(){
console.log("principio");


// Setup the ajax indicator



    // Ajax activity indicator bound to ajax start/stop document events
$(document).ajaxStart(function(){ 
  $('#ajaxBusy').show(); 
}).ajaxStop(function(){ 
  $('#ajaxBusy').hide();
});

//control de alias
    $("#alias").keyup(function(){


        var ID=$("#alias").val();
        var REST=$("#rest").val();
        var ACTUAL = "<?php echo $row_Recordset1['alias_mesero']?>";

        $.post("check_username_edit.php", { username: ID, rest: REST, actual: ACTUAL},

                function(result){
                    console.log(result);
                    //if the result is 1
                    if(result == 1){

                        document.getElementById('mensajealias').innerHTML ="Nombre corto disponible";
                          document.getElementById('boton').style.visibility='visible'; // hide 
                             document.getElementById('mensajeboton').innerHTML ="Ahora puede insertar los datos";

                    }
                    else if(result == 2){

                        document.getElementById('mensajealias').innerHTML ="No ha modificado el nombre corto";
                          document.getElementById('boton').style.visibility='visible'; // hide 
                             document.getElementById('mensajeboton').innerHTML ="Ahora puede insertar los datos";

                    }
                    else if(result == 0){

                          document.getElementById('mensajealias').innerHTML ="Nombre corto no disponible, ya existe";
                           document.getElementById('boton').style.visibility='hidden'; // hide 
                             document.getElementById('mensajeboton').innerHTML ="No se puede insertar hasta que no modifique los datos";

                    }
            });



    });

//control de rest
    $("#rest").change(function(){


        var ID=$("#alias").val();
        var REST=$("#rest").val();
        var ACTUAL = "<?php echo $row_Recordset1['alias_mesero']?>";

        $.post("check_username_edit.php", { username: ID, rest: REST, actual: ACTUAL},

                function(result){
                    console.log(result);
                    //if the result is 1
                    if(result == 1){

                        document.getElementById('mensajealias').innerHTML ="Nombre corto disponible";
                          document.getElementById('boton').style.visibility='visible'; // hide 
                             document.getElementById('mensajeboton').innerHTML ="Ahora puede insertar los datos";

                    }
                    else if(result == 2){

                        document.getElementById('mensajealias').innerHTML ="No ha modificado el nombre corto";
                          document.getElementById('boton').style.visibility='visible'; // hide 
                             document.getElementById('mensajeboton').innerHTML ="Ahora puede insertar los datos";

                    }
                    else if(result == 0){

                          document.getElementById('mensajealias').innerHTML ="Nombre corto no disponible, ya existe";
                           document.getElementById('boton').style.visibility='hidden'; // hide 
                             document.getElementById('mensajeboton').innerHTML ="No se puede insertar hasta que no modifique los datos";

                    }
            });



    });



});

</script>

如果用户逐个字符地输入文本,则验证将像魅力一样进行。 但是我发现如果用户很快输入文本,那么有时验证不会返回正确的值。

我想我可以使用更改(功能)而不是键盘(功能),但我希望用户不必离开要验证的字段。

欢迎任何建议。

2 个答案:

答案 0 :(得分:0)

我在搜索框上使用了这种方法,当用户在短时间内停止输入时我只想执行搜索:

var delay = (function () {
    var timer = 0;
    return function (callback, ms) {
        clearTimeout(timer);
        timer = setTimeout(callback, ms);
    };
})();

$("#alias").on('propertychange keyup input paste', function () {
    delay(function () {
        //validate
    }, 1000);
});

当任何这些事件触发时,它会启动一个计时器1秒钟,并且只有在计时器到期时才执行验证。如果收到任何新事件,计时器将重置为1秒。此事件处理程序也适用于从输入切换和粘贴输入。

答案 1 :(得分:-1)

您需要考虑两点: 1)旧式Keyup keydown事件不可靠。如果您使用它们,您始终需要从后端进行备份验证。如果用户快速输入,则会触发很少的键盘事件,但您甚至不确定首先是哪个事件。 2)Morden浏览器支持“输入”等新事件,如果可能,您应该使用新事件。