почему я не могу вызвать функцию Jquery внутри выражения if - PullRequest
0 голосов
/ 22 декабря 2010
$("#btn1").click(function(){

//CheckMyWeight is called Perfectly here and not in the if loop expression

if ($("#frm1").validationEngine({returnIsValid:true}) && CheckMyWeight() && a === b) {  

}});

почему я не могу вызвать "CheckMyWeight ()" в выражении цикла if, и я могу вызывать идеально после функции "# btn1".

Ответы [ 2 ]

4 голосов
/ 22 декабря 2010

Если левая сторона && возвращает ложь, правая сторона не будет оцениваться. (поскольку все выражение не может быть правдой)
Это называется коротким замыканием.

Если вы хотите всегда вызывать обе функции, вы должны вызывать их вне условия и присваивать результаты переменным и оставлять комментарий, объясняющий, почему :

var isValid = $("#frm1").validationEngine({returnIsValid:true});
var isHeavy = CheckMyWeight();   //Always call both functions
if (isValid && isHeavy && a === b) {  
    ...
}

Существуют и другие обходные пути, но они скрывают намерение кода.

0 голосов
/ 22 декабря 2010

Ниже приведена небольшая программа для проверки того, можете ли вы вызвать "CheckMyWeight ()" в выражении цикла if. Она работает, поэтому проблема в $ ("# frm1"). ValidationEngine ({returnIsValid: true} try работать, нарушая условия.

 <html>
    <head>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
        alert('body');
        function CheckMyWeight() {
          return true;
        }
        $("#btn1").click(function(){
            var a =1,b=1;
            //CheckMyWeight is called Perfectly here and not in the if loop expression
    //        CheckMyWeight() &&
            if ( CheckMyWeight() && a === b) {
                alert('hi');
        }
        });
    });
    </script>
    </head>
    <body>
    <button id="btn1">Click me</button>
    </body>
    </html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...