为什么点击后返回函数不同 [英] Why is return function different after click

查看:84
本文介绍了为什么点击后返回函数不同的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在以下代码$('body').delegate('.submit',... passed = search && passed; ...中,单击形式为i的按钮后,在var passed中输出为true,以防在函数搜索中var resultfalse的情况下,因为数据为'0'.如何解决?

In following code $('body').delegate('.submit',... passed = search && passed; ... after click on button in form i have in var passed output as true in case var result in function search is false because data is '0'. How can fix it?

   function search(e) {
       e.preventDefault();
       $('input').live('keyup change', function () {
           var result = true;
           $.ajax({
               type: 'POST',
               dataType: 'json',
               url: 'myUrl',
               data: myData,
               async: false,
               cache: false,
               success: function (data) {
                   //in the here data is 0
                   if (data == 0) {
                       alert('data is 0')
                       result = false;
                   } else {
                       alert('data is not 0')
                   }
               }
           })
           alert(result) // Output this alert is 'false' because data is '0'
           return result;
       })
   }
   $('.myclass_1').live('click', search);
   $('.myclass_2').live('keyup change', search);

   $('body').delegate('.submit', 'submit', function () {
       var passed = true;
       //passed = required_selectbox() && passed;
       //passed = required_rediuses() && passed;
       passed = search && passed;
       alert(passed); // This output is always 'true' !!!!!!!!!!!!!?
       if (!passed) {
           $('#loadingDiv, #overlay').hide();
           return false;
       }
   });

推荐答案

尝试更改此行:

passed = search && passed;

收件人:

passed = search() && passed;


修改

在仔细考虑了您希望代码执行的工作之后,我将其的逻辑重写为:

After careful consideration of what you seemed to want your code to do, I rewrote the logic of it to this:

var searchResult = false;
var search = function(e) {
    e.preventDefault();
    $.ajax({
        type: 'POST',
        url: 'myURL',
        data: myData,
        async: false,
        success: function(data) {
            if (data == '0') {
                searchResult = false;
            } else {
                searchResult = true;
            }
        }
    });
};

$('.myclass_1').live('click', search);
$('.myclass_2').live('keyup change', search);

$('body').delegate('.submit', 'click', function(e) {
    var passed = true;

    if (!(searchResult && passed)) { // <-- NOTICE THIS
        $('#loadingDiv, #overlay').hide();
        return false;
    }
});

设置全局变量searchResult并在search()函数中对其进行修改意味着您不必从中返回任何内容.现在,您可以在提交"按钮的单击事件中选中searchResult.您要将search()函数作为回调附加到 .myclass_1 的click事件和 .myclass_2 的keyup和change事件,因此现在search()函数将触发并根据Ajax响应正确设置searchResult.

Setting a global variable searchResult and modifying that in the search() function means you don't have to return anything from it. You can now check searchResult right in the submit button's click event. You're attaching the search() function as the callback to .myclass_1's click event and .myclass_2's keyup and change events, so now the search() function will fire and properly set searchResult based on the ajax response.

这篇关于为什么点击后返回函数不同的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆