0

ユーザーが選択できる 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変更されたときに関数内の値を更新します。

4

2 に答える 2

1

グローバル変数を使用します。ローカル スコープの formData 変数として、別の関数でアクセスすることはできません。

コードを次のように変更します

window.formData = $("form").serialize();
于 2012-10-24T07:46:12.597 に答える
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);
     };
   });
});
于 2012-10-24T07:47:41.480 に答える