函数,变量和jquery

时间:2012-10-24 07:41:37

标签: javascript jquery

我有8个搜索过滤器用户可以选择。当用户点击过滤器时,它会打开此过滤器的选项。当用户点击时,会触发函数hideFilterSearch()。我有关于理解变量formData的范围的问题(见下文)。

$(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传递给函数的正确方法是什么,但在更改函数时仍会在函数内更新它的值。

2 个答案:

答案 0 :(得分:1)

使用全局变量。作为本地范围内的formData变量,您无法在其他函数中访问它。

将您的代码更改为以下

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

答案 1 :(得分: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);
     };
   });
});