单击后为什么返回功能不同

时间:2011-11-26 22:11:01

标签: javascript jquery

在以下代码$('body').delegate('.submit',... passed = search && passed; ...之后,如果函数搜索中的var passedtrue,则在result输出中false输出 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; } }); 因为数据是'0'。怎么解决它?

{{1}}

3 个答案:

答案 0 :(得分:0)

这里有一些问题。

首先,您的方法search.live /等上设置了额外的keyup处理程序,我不明白。如果您的目标是对这些事件运行search,请不要再次绑定search 中的事件

其次,委托函数中的search变量是什么?这应该代表search()函数的返回值,还是其他的东西?如果它应该是search()的返回值,那么它不是 - 为了你应该设置全局(或命名空间的全局),如previous question中所述。

我建议在进一步之前点击一些JavaScript和jQuery教程;从长远来看,这将节省一些时间。在没有处理原因/如何运作的问题的情况下投入大量代码最终会适得其反。

答案 1 :(得分:0)

尝试更改此行:

passed = search && passed;

要:

passed = search() && passed;

修改

在仔细考虑了似乎之后想要你的代码做什么之后,我重写了它的逻辑

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 的点击事件和 .myclass_2 的键盘和更改事件,现在search() 1}}函数将根据ajax响应触发并正确设置searchResult

答案 2 :(得分:0)

 passed = search && passed;// this line is missing something

它总是返回true,因为你没有测试搜索的返回值,而是它是否在该范围内定义(它在哪个范围内)

试试这个

   $('body').delegate('.submit', 'submit', function (event) /* USE the event obj to pass it to search() */ 
      {
       var passed = true;
       //passed = required_selectbox() && passed;
       //passed = required_rediuses() && passed;
       passed = search(event) && passed;// CHANGES ARE HERE
       alert(passed); // This output is always 'true' !!!!!!!!!!!!!?
       if (!passed) {
           $('#loadingDiv, #overlay').hide();
           return false;
       }
   });