0

我有这样的代码:

$("button[value^='SAVEALL']").live("click",function(){
    rowCheck(1);
    rowCheck(2);
    columnCheck(A);
    columnCheck(B);
    alert("all function passed");
});

function rowCheck(x){
        if (x>10){
              return false;
        }
}

function columnCheck(a){
        if (a=="A"){
              return false;
        }
}

上面的代码,它只运行第一个函数,然后直接提交表单。如何确保它运行所有功能并在它们全部返回后提交表单true

4

3 回答 3

1

首先,您需要您的函数返回真或假,例如

function rowCheck(x){
    if (x>10){
          return false;
    }
    return true;
}

function columnCheck(a){
    if (a=="A"){
          return false;
    }
    return true;
}

然后更改您的点击代码

$("button[value^='SAVEALL']").live("click", function(){
    if(rowCheck(1) && rowCheck(2) && columnCheck(A) && columnCheck(B))
    {
        return true;
    }
    return false;
        //alert("all function pass");
});
于 2012-08-21T08:27:14.767 回答
0

尝试...

$("button[value^='SAVEALL']").live("click",function(e){
    e.preventDefault();
    rowCheck(1);
    rowCheck(2);
    columnCheck(A);
    columnCheck(B);
    alert("all function pass");
});
于 2012-08-21T08:22:48.640 回答
0

您没有正确使用该事件。这是我要做的:

$("button[value^='SAVEALL']").live("click",function(event){
    if( rowCheck(1) || rowCheck(2) || columnCheck(A) || columnCheck(B) ) {
        event.preventDefault();
    }
});

function rowCheck(x){
        return (x>10);
}

function columnCheck(a){
        return (a=="A");
}

主要变化:

  • 为了代码可读性,我切换了返回值的含义。您使用了如此多的布尔反转,代码变得不清楚。如果必须停止事件,函数将返回true,而不是相反。
  • 而不是返回false,这是一段不可读的代码,只需使用event.preventDefault();. 更干净,更具可读性。请记住,我不得不将您更改function() {function(event) {!! click 事件是由浏览器传递的,阻止它发生比依靠一些过时的返回技术要好得多false
  • 永远不要使用像if(some_boolean) { return true; }. 这是一个坏习惯,丝毫不会增加可读性。

这是因为:

if ( name=="John" && lastname =="Smith") {
    return true;
} else {
    return false;
}

总是可以改写为:

return ( name=="John" && lastname =="Smith");
于 2012-08-21T08:41:39.847 回答