2016-04-23 28 views
0

所以我有一些输入(姓名,用户名,生日,密码和电子邮件)与一些验证条件,我这样做例如:Javascript - 启用提交按钮,当所有输入有效

function checkfnlname(field) { 
curr = document.getElementById(field).value; 
if (curr.length > 0) { 
    updateCSSClass(field, 1); 
    return true; 
} 
else { 
    updateCSSClass(field, 0); 
    return false; 
}} 

这改变了它的颜色并返回true。我使用onKeyUp=""来调用这些函数。 现在我想要做的是使“提交”按钮处于禁用状态,直到所有字段都已完成并通过上面的函数进行验证。 我写了这个功能:

function formvalid() { 
if (checkfnlname('fname') && && (all other fields)) { 
    document.getElementByID("submitinput").disabled = false; 
} 
else { 
    document.getElementByID("submitinput").disabled = true; 
} 
return 1;} 

但我不知道如何/在哪里调用它。 (我尝试了很多我发现的东西,但没有成功) 这是正确的方法吗?如果是的话,我该如何调用这个函数?

+0

把它也“的onkeyup” – rmondesilva

回答

0

您需要在事件中调用验证功能。

// For example 
<input type="text" onkeyup="validateForm()"> 
<select onchange="validateForm()"></select> 

方式二:

使用一个提交按钮代替,使用普通的按钮和呼叫,检查您的表单项功能。

// Into the form or anywhere you want 
<button type="button" onclick="validateForm()">Submit</button> 

function validateForm() { 
    // Code to validate the form items 
    // if validated, send the form 

    // For example submitting a form with javascript 
    document.getElementById("myForm").submit(); 
} 
+0

这是为学校的一个项目,我们要求做这种方式,按钮有被禁用,直到所有的领域根据他们的条件进行检查。我知道这很容易,但我不能:P – AnotherBrick

+0

@joneexp编辑我的帖子。就像rmondesilva评论的那样,只需在onkeyup事件中添加验证功能即可。如果你不想在事件中有两个函数调用,只需调用checkfnlname函数中的validate函数 – SEUH

0

很简单,调用按钮启用/禁用功能,在你的类型/值检查功能中,像这个 -

function checkfnlname(field) { 

    //here you can perform input check 
    curr = document.getElementById(field).value; 
    if (curr.length > 0) { 
     updateCSSClass(field, 1); 
     return true; 
    } 
    else { 
     updateCSSClass(field, 0); 
     return false; 
    } 
    // to check button validations 
    formvalid(); 
} 

去这样,每次你在它会形式输入时间检查按钮的条件是否匹配,并将相应地发挥作用。

+0

否。将formvalid();放在条件之前,否则它将不会被执行,因为'return'。 – rmondesilva

+0

'formvalid()'函数再次调用'checkfnlname(field)',所以这最终会在一个永无止境的递归循环中结束。 –

+0

不,它应该只在最后,因为按钮函数正在检查'checkfnlname()'的有效性,然后返回输出!除非我们从第一个fn获得'真/假'条件,否则按钮功能将不起作用。 –

1

我的方法:

function updateCSSClass(a, b) { 
 

 
} 
 

 
function checkfnlname(field) { 
 
    curr = document.getElementById(field).value; 
 
    if (curr.length > 0) { 
 
    updateCSSClass(field, 1); 
 
    return true; 
 
    } else { 
 
    updateCSSClass(field, 0); 
 
    return false; 
 
    } 
 
} 
 
window.onload = function() { 
 
    // disable submit 
 
    document.getElementById('submit').setAttribute('disabled', 'disabled'); 
 

 
    // attach the keyup event to each input 
 
    [].slice.call(document.querySelectorAll('form input:not([type="submit"])')).forEach(function (element, index) { 
 
    element.addEventListener('keyup', function (e) { 
 
     // compute the number of invalid fields 
 
     var invalidFields = [].slice.call(document.querySelectorAll('form input:not([type="submit"])')).filter(function (element, index) { 
 
     return !checkfnlname(element.id); 
 
     }); 
 
     if (invalidFields.length == 0) { 
 
     // reenable the submit if n. of invalid inputs is 0 
 
     document.getElementById('submit').removeAttribute('disabled'); 
 
     } else { 
 
     // disable submit because there are invalid inputs 
 
     document.getElementById('submit').setAttribute('disabled', 'disabled'); 
 
     } 
 
    }, false); 
 
    }); 
 
}
<form action="http://www.google.com"> 
 
    First name:<br> 
 
    <input type="text" name="firstname" id="firstname"><br> 
 
    Last name:<br> 
 
    <input type="text" name="lastname" id="lastname"><br> 
 
    User name:<br> 
 
    <input type="text" name="username" id="username"><br> 
 
    Birthday:<br> 
 
    <input type="date" name="birthday" id="birthday"><br> 
 
    Password:<br> 
 
    <input type="password" name="password" id="password"><br> 
 
    email:<br> 
 
    <input type="email" name="email" id="email"><br> 
 
    <input type="submit" value="submit" id="submit"> 
 
</form>

+0

我做了一个函数,根据它的id(不同的条件)检查元素,并在这里替换它'return!checkfnlname(element.id);'因为我认为你的代码检查一个函数的所有字段。但是,在我输入所有字段后,它仍然没有释放提交按钮(因为updateCSSClass函数而变绿) – AnotherBrick

+0

@joneexp我建议你只是给我一个帮助。是的,我使用唯一的函数checkfnlname来检查所有输入。我希望你能找到正确的方法来解决你的问题。如果我可以帮助你让我知道如何 – gaetanoM

+0

是的,我明白,我知道这应该工作,但我不知道为什么它不。反正非常感谢你:) – AnotherBrick

0

最简单的方法是调用formvalid()onkeyup的各个领域。该函数验证每个字段并显示该按钮是否有效。

这应该能够完成这项工作,虽然效率不高。每当你在任何领域输入任何东西时,检查每个领域是徒劳的。例如:当你从第一个输入开始时,检查最后一个没有意义。

相反,您可以有一个检查函数,当字段有有效数据时更新全局布尔变量,然后验证函数检查布尔值而不是调用检查函数。然后在每个区域onkeyup你应该分别调用(首先检查,然后验证)。

喜欢的东西:

validFields=[]; 
function checkField(field) { 
    if (conditionIsMet) validFields[validFields.length]=field; 
} 
function validateForm() { 
    if (validFields.length==numberOfFields) ... 
} 

<input type="text" name="field1" value="" onkeyup="checkfield(this.name);validateForm()" />