2011-11-26 149 views
0

后的不同在形式点击按钮后,下面的代码$('body').delegate('.submit',... passed = search && passed; ...我在功能搜索在VAR passed输出true的情况下,无功resultfalse因为数据是“0”。如何解决它?为什么返回功能点击

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

请澄清返回true您题。目前还不清楚你在问什么。另外,变量'search'在哪里声明或设置? – jfriend00

+0

在这里'通过=搜索&&传递;'搜索是相同的功能搜索。 –

+0

这解释了它。你必须用'search(e)'实际调用搜索功能,而不仅仅是搜索。 – jfriend00

回答

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 click事件和.myclass_2的KEYUP和改变事件,所以现在search()功能将激发并妥善基于Ajax响应设置searchResult

+0

我尝试这个我不工作。 –

+0

是的,那是因为在'search()'中你试图从一个事件过程中返回一个布尔值。如果你在'e.preventDefault();'后面添加'return false;',那么当alert()被调用时你会看到“false”。 –

+0

有关我的意思的示例,请参阅http://jsfiddle.net/mmmshuddup/FfKry/。 –

0

这里有几个问题。

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

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

我推荐在进入之前敲击几个JavaScript和jQuery教程更进一步;从长远来看它会节省一些时间。在问题中投入大量代码而没有掌握为什么/如何工作最终会适得其反。

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

它总是因为你没有测试搜索的返回值,而是不管它是在该范围(在它是)定义

试试这个

$('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; 
     } 
    }); 
+0

我改变了但不工作,仍然输出alert(通过);'是true,!? –

+0

'if(data == 0){'shoud be'if(data ==“0”){ – UnLoCo