2012-10-24 100 views
0

我有8個搜索過濾器用戶可以選擇。當用戶點擊過濾器時,它會打開該過濾器的選項。當用戶點擊時,觸發功能hideFilterSearch()。我對可變形式數據的範圍的理解有問題(見下文)。函數,變量和jquery

$(document).ready(function() { 
    var formData = $("form").serialize(); 
}); 

function hideFilterSearch() { 
    console.log(formData); 
    $(".filters").hide(); 
    newFormData = $("form").serialize(); 
    if (formData != newFormData) { 
     //newFormData is sent with ajax and search results are updates 
    } 
    formData = $("form").serialize(); 
} 

//show, hide filter changer 
$('body').click(function(event) { 
    if (!$(event.target).closest('.filter').length) {   
     hideFilterChanger(); 
    }; 
}); 

在這種情況下,控制檯日誌給了我一個空字符串。我也嘗試發送formData作爲參數()hideFilterSearch(formData),但後來問題是formData將不會更新。我不確定什麼是通過formData來正常工作的正確方法,但是在更改函數時仍然會更新它的值。

回答

1

使用全局變量。作爲本地範圍中的formData變量,您不能在antother函數中訪問它。

你的代碼更改爲以下

window.formData = $("form").serialize(); 
0

功能可以返回值。傳遞formData並從函數返回更新後的一個。然後您可以將其分配在hideFilterChanged中。

$(document).ready(function(){ 
var formData = $("form").serialize(); 

function hideFilterSearch(formData){ 
    console.log(formData); 
    $(".filters").hide(); 
    newFormData = $("form").serialize(); 
    if(formData!=newFormData){ 
     //newFormData is sent with ajax and search results are updates 
    } 
    return $("form").serialize(); 
    } 

    //show, hide filter changer 
    $('body').click(function(event) { 
    if (!$(event.target).closest('.filter').length) {   
     formData = hideFilterChanger(formData); 
    }; 
    }); 
});