2011-11-27 43 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; 
}); 

    } 
);