2011-11-26 152 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