Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证输入I';我专注于,不管别人的地位如何?_Javascript_Jquery_Forms - Fatal编程技术网

Javascript 验证输入I';我专注于,不管别人的地位如何?

Javascript 验证输入I';我专注于,不管别人的地位如何?,javascript,jquery,forms,Javascript,Jquery,Forms,我有个问题需要解决。。。我想做的是准确地验证用户正在填写的输入,不管第一个输入或任何其他输入是否为空,另一个是如果每个输入都已验证,则不发送ajax post请求 这是我目前掌握的代码: function sendInfo() { //variables var name = $("input#name").val(); var surname = $("input#surname").val(); //inputs validation if (na

我有个问题需要解决。。。我想做的是准确地验证用户正在填写的输入,不管第一个输入或任何其他输入是否为空,另一个是如果每个输入都已验证,则不发送ajax post请求

这是我目前掌握的代码:

function sendInfo() {

    //variables
    var name = $("input#name").val();
    var surname = $("input#surname").val();

    //inputs validation
    if (name == "") {
        $("input#name").focus();
        $("input#name").parent().find('span').addClass('err').text('you have to fill the name');
        return false;
    } 
     if (surname == "") {
        $("input#surname").focus();
        $("input#surname").parent().find('span').addClass('err').text("you have to fill the surname");
        return false;
    } 

        //Manage server side

        $.ajax({
            type: 'POST',
            url: '/path',
            data: {name, surname},
            success: function (result) {
                //all ok, do something
            },
            error: function (err) {
                //something wrong, do other stuff
            }
        });
}
试试这个

function sendInfo() {
    //variables
    var name = $("input#name").val();
    var surname = $("input#surname").val();
    var error = false;

    //inputs validation
    if (name == "") {
        $("input#name").focus();
        $("input#name").parent().find('span').addClass('err').text('you have to fill the name');
        error = true;
    } 
     if (surname == "") {
        $("input#surname").focus();
        $("input#surname").parent().find('span').addClass('err').text("you have to fill the surname");
        error = true;
    } 

    if (error) return false;

        //Manage server side

        $.ajax({
            type: 'POST',
            url: '/path',
            data: {name, surname},
            success: function (result) {
                //all ok, do something
            },
            error: function (err) {
                //something wrong, do other stuff
            }
        });
}

可以通过添加bool变量isValid来实现这一点。您的代码应该是这样的

function sendInfo() {
//variables
var isValid = true;
var name = $("input#name").val();
var surname = $("input#surname").val();

//inputs validation
if (name == "") {
    $("input#name").focus();
    $("input#name").parent().find('span').addClass('err').text('you have to fill the name');
    isValid = false;
} 
 if (surname == "") {
    $("input#surname").focus();
    $("input#surname").parent().find('span').addClass('err').text("you have to fill the surname");
    isValid = false;
} 

    //Manage server side
if(isValid){
    $.ajax({
        type: 'POST',
        url: '/path',
        data: {name, surname},
        success: function (result) {
            //all ok, do something
        },
        error: function (err) {
            //something wrong, do other stuff
        }
    });
  }
}
<input type='text' id='some-text-1' class='validated-field'>
<input type='text' id='some-text-2' class='validated-field'>
<input type='text' id='some-text-3' class='validated-field'>

尝试在post之前验证onfocus()的输入

var checkInput = function(input) { if (input.val() == '') { input.parent().find('span').addClass('err').text('you have to fill the name'); return false; } return true; } function sendInfo() { var validForm = false; $('input').each(function(){ validForm = checkInput($(this)); }); if (validForm) { alert('ok - do the post'); } else { alert('fill the fields'); } } $( document ).ready(function() { $('input').on('focus',function() { checkInput($(this)); }); }); var checkInput=函数(输入){ 如果(input.val()=''){ input.parent().find('span').addClass('err').text('必须填写名称'); 返回false; } 返回true; } 函数sendInfo(){ var validForm=假; $('input')。每个(函数(){ validForm=checkInput($(this)); }); if(有效格式){ 警报(“确定-执行post”); }否则{ 警报(“填写字段”); } } $(文档).ready(函数(){ $('input')。在('focus',function()上{ 检查输入($(此)); }); });
向每个要验证的字段添加特定类。然后将元素上的事件与该类绑定,该类将在更改时验证字段。如果已正确验证,请将此信息存储在元素上

例如,您的字段如下所示

function sendInfo() {
//variables
var isValid = true;
var name = $("input#name").val();
var surname = $("input#surname").val();

//inputs validation
if (name == "") {
    $("input#name").focus();
    $("input#name").parent().find('span').addClass('err').text('you have to fill the name');
    isValid = false;
} 
 if (surname == "") {
    $("input#surname").focus();
    $("input#surname").parent().find('span').addClass('err').text("you have to fill the surname");
    isValid = false;
} 

    //Manage server side
if(isValid){
    $.ajax({
        type: 'POST',
        url: '/path',
        data: {name, surname},
        success: function (result) {
            //all ok, do something
        },
        error: function (err) {
            //something wrong, do other stuff
        }
    });
  }
}
<input type='text' id='some-text-1' class='validated-field'>
<input type='text' id='some-text-2' class='validated-field'>
<input type='text' id='some-text-3' class='validated-field'>
注意:这将基本上在每次按键后“激发”,而不仅仅是在您完成编辑后

注2:根据创建元素的方式,如果要在
document.ready
之后调用此函数,则必须将其绑定到当时确实已准备就绪的元素

您的validate函数应该执行必要的验证,然后以某种方式将元素标记为

function validate($element){
    var value = $element.val();
    // var isValid = your validation here
    $element.data("valid", isValid);
}
这将产生如下元素

<input type='text' id='some-text-1' class='validated-field' data-valid=true>
<input type='text' id='some-text-2' class='validated-field' data-valid=false>
<input type='text' id='some-text-3' class='validated-field'>

第一个验证正确,第二个不正确,第三个尚未验证,因为用户尚未填写

通过这个,您可以检查这些元素中的每一个是否都经过验证

validateElements(className){
    var elements = $('.' + className);
    for(var i=0; i<elements.length; i++){
        if(!$(elements[i]).data("valid") === true){
            return false; //at least one isn't validated OK
        }
    }
    return true; //all good
}
validateElements(类名){
变量元素=$('.'+className);

对于(var i=0;ii如果希望每次执行所有验证,请在每次验证中删除
返回的
,并将单个变量改为false,然后在进行ajax调用之前检查该变量,如果该变量为false,则跳过调用?
var isValid=true;
在验证之前,然后将
isValid=false
改为
re在ajax调用之前检查
if(!isValid){return;}
。此外,您应该将验证包装到单个函数中,以便从任何地方调用。这样,如果(!validateForm()){return;},您就可以执行
if(!validateForm()){return;}
在ajax和
返回有效之前;
内部
validateForm
如果用户已经填写了您需要验证的内容?另外,如果您总是想验证所有设置焦点,则没有什么意义,因为您总是在最后一个无效字段上结束,忽略其他字段。我根本不会设置焦点,如果必须设置,请设置它指向第一个无效字段而不是最后一个,可能更方便用户?
如果(isValid)
足够多,它是一个布尔值:)无论如何,不要执行
如果(isValid==true){//lots of code here}
而是执行
如果(!isValid){return}
更易于维护和阅读。-尽可能避免嵌套。这样会产生更干净、更可读的代码。好的,谢谢让我编辑我的代码,我们必须检查true,以便使用if(isValid)虽然你的答案很好,但一般来说你不必检查
是否有效
,检查
!isValid
可以让你在不添加不必要的嵌套的情况下突破,这是编写干净代码的一个好习惯,这使得代码在需要时更易于管理和重构。如果你遵循通用全局输入验证的路线ion请确保您没有调用错误消息中的所有字段
name
。当您否决某人时,它通常会进行评论。我们都在这里学习,您的盲目否决在这里并不受欢迎,特别是考虑到它在摆姿势5秒后被否决。您要么是一个超级快速的读者,要么您正在尝试选择你的答案,这会让你更不受欢迎。