2011-11-27 66 views
-1

在下面的函数中,如果data = 0或空值,我想返回false,否则返回true - 对于一个输入字段,它的工作原理。函数返回不起作用

但是,如果我有两个输入class="myclass_1"和一个有价值和其他输入没有一个值,它不会按预期工作。使用$('body').delegate('.submit', 'click',...当我alert(searchResult)输出为true即使一个栏位是空

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('keyup change', search); 

$('body').delegate('.submit', 'click', function(e) { 
    var passed = true; 
alert(searchResult)// this output is true 
    if (!(searchResult && passed)) { // <-- NOTICE THIS 
     $('#loadingDiv, #overlay').hide(); 
     return false; 
    } 
}); 
+4

我试图读取你的问题,理解它,但我不能。尝试重写它,以便它不是一个单句... – Guffa

+0

OMG请证明看你的问题,它几乎是英语。 – ubiquibacon

+0

可能重复[为什么返回功能不同点击后](http://stackoverflow.com/questions/8282009/why-is-return-function-different-after-click) –

回答

0

希望能

在点击表单按钮我明白你的问题:

你没确定如果有空输入,当最后的ajax调用成功时(不返回0),searchResult将为真。

您可以将ajax-calls的成功s的数据属性为每一个输入,这样你就可以检查是否所有输入的最后AJAX调用是全成:

jQuery(
    function($) 
    { 

    var search = 
      function(e) 
      { 
      e.preventDefault(); 
      var target=$(e.target); 
      if(!target.val() 
       || 
       (target.data('oldValue') && target.data('oldValue')==target.val() 
      ) 
     ) 
      { 
      //return here, no need for a request if 
      // the value hasn't change or is empty 
      return; 
      } 
     target.data('oldValue',target.val()); 
     //reset data-result for the given input 
     target.data('result',0); 
    $.ajax({ 
     type: 'POST', 
     url: 'url', 
     data: myData, 
     async: false, 
     success: function(data) { 
      if (data == '0') { 
       target.data('result',0); 
      } else { 
       target.data('result',1); 
      } 
     } 
    }); 
}; 

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

$('body') 
    .delegate('.submit', 
      'click', 
      function(e) 
      { 
       var inputs=$('.myclass_1'), 
        passed=true, 
        searchResult=(
           inputs 
            .length 
            === 
           inputs.filter(function() 
               { 
               return($(this).data('result')===1); 
               }) 
            .length 
           );  

    //searchResult will be false if data-result isn't set to 1 in all inputs 
    if (!(searchResult && passed)) { 
     $('#loadingDiv, #overlay').hide(); 
     return false; 
    } 
    return true; 
}); 

    } 
);