2016-07-18 4 views
0

私はクリックされた要素のidで塗りつぶす配列selected_filtersを持っています。この配列に従ってif文を生成する必要があります。私は文字列を生成しようとし、それを実行するためにeval()を使用しようとしましたが、動作しませんでした。たぶん私は何か間違っているか、声明を出す方法を知っていますか?if文の生成JQuery

文列生成:

var selected_filters = [filter_by_color,filter_by_transmissivity]; 
    $.each(selected_filters, function(k, v){ 
     validate += '($.inArray(t.data(' + v + '),filters_obj[' + v + ']) > -1 || obj_l == emptyFilters) && '; 
    }); 
    validate += '(search.contains(filters_obj.search) || filters_obj.search.length === 0)'; 

生成された文字列: ($.inArray(t.data(filter_by_color),filters_obj[filter_by_color]) > -1 || obj_l == emptyFilters) && ($.inArray(t.data(filter_by_transmissivity),filters_obj[filter_by_transmissivity]) > -1 || obj_l == emptyFilters) && (search.contains(filters_obj.search) || filters_obj.search.length === 0)

使用方法:解決策が見つかりました

if(eval(validate)){ //some code } 
+1

あなたが "動作しませんでした" とはどういう意味ですか?コードは実行されませんか?何かエラーがありますか? –

+0

コードは常に 'else'条件の中にあります。しかし、私は 'if'に対して' true'である多くのケースを持っています – vladja

+1

私が推奨できるのは、動作が正しくないときに状況を見つけることです。if文if if(eval(validate))を生成条件に置き換え、デバッグ。 –

答えて

0

。ロジックが変更され、eval()を使用しないでください。 変更されたコードへ:

var visible = true; 
$.each(selected_filters, function(k, v){ 
    visible = visible && ($.inArray(t.data(v),filters_obj[v]) > -1 || filters_obj[v].length === 0); 
       }); 
    visible = visible && (search.contains(filters_obj.search) || filters_obj.search.length === 0); 

使用法: if(visible){ //some code }