Javascript 检查多个函数是否为真,然后执行某些操作
我被困在我认为是一个简单的PEBCAK错误上。在我提交表单之前,我试图验证我的所有函数是否正确,但我无法终生找出错误所在。下面是我的javascript代码:Javascript 检查多个函数是否为真,然后执行某些操作,javascript,function,return-value,return,form-submit,Javascript,Function,Return Value,Return,Form Submit,我被困在我认为是一个简单的PEBCAK错误上。在我提交表单之前,我试图验证我的所有函数是否正确,但我无法终生找出错误所在。下面是我的javascript代码: function checknewaccount(){ if(emailvalid()&& checkname() && passwordcheck()) { return true; } else{ return false; } } function emailvalid() {
function checknewaccount(){
if(emailvalid()&& checkname() && passwordcheck())
{
return true;
}
else{
return false;
}
}
function emailvalid()
{
if(email condition)
{
return true;
}
else {
return false;
}
}
function checkname())
{
if(name condition)
{
return true;
}
else {
return false;
}
}
function passwordcheck(){
if(password condition)
{
return true;
}
else {
return false;
}
}
html格式如下:
<form id="newaccount" name="newaccount" method="post" onSubmit="accountcode.php">
<input type="text" id="email" onBlur="emailvalid()"/>
<input type="text" id="username" onBlur="checkname()" />
<input type="password" id="password" onkeyup="passwordcheck()"/>
<input type="submit" value="New" onClick="return checknewaccount()"/>
</form>
当我单击“新建”时,没有发生任何事情,我知道accountcode.php没有运行,因为数据库端没有发生任何事情,也没有报告任何错误
总而言之,我的问题是checknewaccount()如何不工作?它是否与我如何调用它们有关
我是javascript新手,因此如果我完全停止了我的实现,我很抱歉。非常感谢您的帮助!这部分很好(我自行修复了缩进):
尽管您可以改进它:
function checknewaccount(){
return emailvalid() && checkname() && passwordcheck();
}
这部分是一个语法错误(委婉地说):
如果这不是对代码的真正引用,您将不得不更新您的问题(尽管我可能不会在这里更新此答案)。询问代码并在问题中引用伪代码没有多大意义。(至少,伪代码缺少最后的}
)
同样的情况也适用于表单中的函数:
function emailvalid()
{
if(email condition)
{
return true;
}
else {
return false;
}
}
这很好(假设电子邮件条件
仍然是psuedocode),但是如果,则不需要:
function emailvalid()
{
return email condition;
}
说到“什么都没发生”,确保你有可以使用的调试工具。Chrome内置了开发工具,只需按Ctrl+Shift+I。对于Firefox,你可以安装出色的Firebug。IE的最新版本也内置了开发工具(对于较旧的版本,您可以下载可插入浏览器的Visual Studio的免费版本)。其中任何一个版本都将告诉您语法和其他错误,让您可以逐个语句地浏览代码语句等,这对于了解发生了什么至关重要
这是我认为您正在尝试做的一个快速的版本。我不会这样做,但我做了最小的更改以使其工作:
HTML:
如果emailvalid
等函数要让用户知道字段无效,例如突出显示其标签,则情况会略有变化:
HTML:
表单语法错误-onsubmit=要调用的js函数的名称,action=url
<form action="accountcode.php" id="newaccount" name="newaccount" method="post" onSubmit="return checknewaccount()">
<input type="text" id="email" onBlur="emailvalid()"/>
<input type="text" id="username" onBlur="checkname()" />
<input type="password" id="password" onkeyup="passwordcheck()"/>
<input type="submit" value="New"/>
</form>
经过充分测试的代码:
<html>
<head>
<script type="text/javascript">
function checknewaccount() {
return emailvalid() && checkname() && passwordcheck();
}
function emailvalid() {
var emailAddress = document.getElementById('email').value;
return (emailAddress=='test');
}
function checkname() {
return true;
}
function passwordcheck() {
return true;
}
</script>
</head>
<body>
<form action="#" onsubmit="return checknewaccount();">
<input type="text" id="email" name="email"/>
<input type="submit"/>
</form>
</body>
</html>
函数checknewaccount(){
返回emailvalid()&&checkname()&&passwordcheck();
}
函数emailvalid(){
var emailAddress=document.getElementById('email')。值;
返回(emailAddress=='test');
}
函数checkname(){
返回true;
}
函数密码检查(){
返回true;
}
仅当文本框的值为test
更好的实施方式是:
<html>
<head>
<script type="text/javascript">
function checknewaccount() {
if(emailvalid() && checkname() && passwordcheck()) {
return true;
} else {
document.getElementById('validation').innerHTML = 'Validation failed!';
return false;
}
}
function emailvalid() {
var emailAddress = document.getElementById('email').value;
return (emailAddress=='test');
}
function checkname() {
return true;
}
function passwordcheck() {
return true;
}
</script>
</head>
<body>
<div id="validation"></div>
<form action="#" onsubmit="return checknewaccount();">
<input type="text" id="email" name="email"/>
<input type="submit"/>
</form>
</body>
</html>
函数checknewaccount(){
如果(emailvalid()&&checkname()&&passwordcheck()){
返回true;
}否则{
document.getElementById('validation')。innerHTML='validation failed!';
返回false;
}
}
函数emailvalid(){
var emailAddress=document.getElementById('email')。值;
返回(emailAddress=='test');
}
函数checkname(){
返回true;
}
函数密码检查(){
返回true;
}
因为这至少告诉用户表单没有提交。更好的做法是给用户一个更详细的原因,但这超出了这个问题的范围…忘记语法错误,如果三个函数都相同,有什么意义?@nico我猜它们不是“条件”“在每种情况下都会有所不同。@T.J.Crowder:返回emailvalid()&&checkname()&&passwordcheck();成功了!非常感谢!很有趣-TJ提供的语法更简洁优雅,但功能与您自己的代码完全相同-除非我遗漏了什么?是的,我也不太明白。我将做更多的测试来尝试并找出原因。如果有人有一些想法,请发布!我还建议您启动t在JS中使用alert()
命令来确定正在运行的是什么(或者使用firefox中的firebug插件进行完整的JS调试器)@Basiclife:“我还建议您在JS中开始使用alert()命令…”天啊,不,再没有借口通过alert进行调试了。使用firebug(如您所述),或Chrome的开发工具,或Visual Studio,或…:-)+1对于表单,我甚至没有查看HTML。@Basiclife:这将不起作用,因为我的Javascript函数checknewaccount()没有调用accountcode.php文件。我想让javascript确认所有字段都是正确的,然后将表单提交到accountcode.php。我在提交按钮上使用了return checknewaccount(),因此只有当checknewaccount返回true时,它才会提交。我过去曾用过类似的方法……@T.J.Crowder我同意在生产代码中留下警报是一个巨大的禁忌——在我自己的代码中,我总是有一个带有id=“log”
的div和一个调试(消息)
输出到它的函数-它允许我查看事件/命令的良好日志-但作为查看函数是否被调用的一种快速而肮脏的方法,我仍然认为它很有用。我承认这是一个有争议的观点point@Siriss-只有在onsubmit=“
中引用的方法返回true时,表单才会提交-因此这正是进行验证的地方。如果该方法返回false,则不会发生任何事情。好的,抱歉
function checknewaccount() {
return emailvalid() && checkname() && passwordcheck();
}
function emailvalid() {
var element;
// Get the email element
element = document.getElementById('email');
// Obviously not a real check, just do whatever your condition is
return element.value.indexOf('@') > 0;
}
function checkname() {
var element;
// Get the username element
element = document.getElementById('username');
// Obviously not a real check, just do whatever your condition is
return element.value.length > 0;
}
function passwordcheck() {
var element;
// Get the username element
element = document.getElementById('password');
// Obviously not a real check, just do whatever your condition is
return element.value.length > 0;
}
<form action="http://www.google.com/search"
method="GET" target="_blank"
onsubmit="return checknewaccount()">
<label>Email:
<input type="text" id="email" name='q' onblur="emailvalid()"></label>
<br><label>Username:
<input type="text" id="username" onblur="checkname()" ></label>
<br><label>Password:
<input type="password" id="password" onkeyup="passwordcheck()"/></label>
<br><input type="submit" value="New">
</form>
function checknewaccount() {
var result;
// Because we're actually doing something in each of the
// three functions below, on form validation we want to
// call *all* of them, even if the first one fails, so
// they each color their field accordingly. So instead
// of a one-liner with && as in the previous example,
// we ensure we do call each of them:
result = emailvalid();
result = checkname() && result;
result = passwordcheck() && result;
return result;
}
function emailvalid() {
var element, result;
// Get the email element
element = document.getElementById('email');
// Obviously not a real check, just do whatever your condition is
result = element.value.indexOf('@') > 0;
// Update our label and return the result
updateLabel(element, result);
return result;
}
function checkname() {
var element, result;
// Get the username element
element = document.getElementById('username');
// Obviously not a real check, just do whatever your condition is
result = element.value.length > 0;
// Update our label and return the result
updateLabel(element, result);
return result;
}
function passwordcheck() {
var element, result;
// Get the username element
element = document.getElementById('password');
// Obviously not a real check, just do whatever your condition is
result = element.value.length > 0;
// Update our label and return the result
updateLabel(element, result);
return result;
}
function updateLabel(node, valid) {
while (node && node.tagName !== "LABEL") {
node = node.parentNode;
}
if (node) {
node.style.color = valid ? "" : "red";
}
}
<form action="accountcode.php" id="newaccount" name="newaccount" method="post" onSubmit="return checknewaccount()">
<input type="text" id="email" onBlur="emailvalid()"/>
<input type="text" id="username" onBlur="checkname()" />
<input type="password" id="password" onkeyup="passwordcheck()"/>
<input type="submit" value="New"/>
</form>
<html>
<head>
<script type="text/javascript">
function checknewaccount() {
return emailvalid() && checkname() && passwordcheck();
}
function emailvalid() {
var emailAddress = document.getElementById('email').value;
return (emailAddress=='test');
}
function checkname() {
return true;
}
function passwordcheck() {
return true;
}
</script>
</head>
<body>
<form action="#" onsubmit="return checknewaccount();">
<input type="text" id="email" name="email"/>
<input type="submit"/>
</form>
</body>
</html>
<html>
<head>
<script type="text/javascript">
function checknewaccount() {
if(emailvalid() && checkname() && passwordcheck()) {
return true;
} else {
document.getElementById('validation').innerHTML = 'Validation failed!';
return false;
}
}
function emailvalid() {
var emailAddress = document.getElementById('email').value;
return (emailAddress=='test');
}
function checkname() {
return true;
}
function passwordcheck() {
return true;
}
</script>
</head>
<body>
<div id="validation"></div>
<form action="#" onsubmit="return checknewaccount();">
<input type="text" id="email" name="email"/>
<input type="submit"/>
</form>
</body>
</html>