2012-05-19 86 views
2

我有一個操作複選框值的問題。在複選框「更改」事件返回一個對象,在我的情況:使用「事件」輸出作爲變量

{"val1":"member","val2":"book","val3":"journal","val4":"new_member","val5":"cds"} 

需要的,以便搜索引擎來進行轉化的上述目的來使用它喜歡:

{ member,book,journal,new_member,cds} 

我已經做到了用下面的代碼塊:

var formcheckbox = this.getFormcheckbox(); 
formcheckbox.on('change', function(checkbox, value){ 

       var arr=[]; 

       for (var i in value) { 
        arr.push(value[i]) 
       }; 

       var wrd = new Array(arr); 
        var joinwrd = wrd.join(","); 
         var filter = '{' + joinwrd + '}'; 

         //console.log(filter); 

       //Ext.Msg.alert('Output', '{' + joinwrd + '}'); 

       }); 

的問題是,我想「改變」事件的輸出(「VAR濾波器」,即製造:{構件,書籍,期刊,new_member,CDS})噸o在別處使用它。我試圖讓整個事件變成一個變量(var output =「change event」),但它不起作用。

也許這是一個愚蠢的問題,但我是一個新手,我需要一點幫助。

謝謝你在前進,

湯姆

回答

2

你可以做filter一個全局變量,並用它在任何你需要它。

// global variable for the search filter 
var filter = null; 

var formcheckbox = this.getFormcheckbox(); 
formcheckbox.on('change', function(checkbox, value){ 
    var arr = [], 
    i, 
    max; 

    // the order of the keys isn't guaranteed to be the same in a for(... in ...) loop 
    // if the order matters (as it looks like) better get them one by one by there names 
    for (i = 0, max = 5; i <= max; i++) { 
     arr.push(value["val" + i]); 
    } 

    // save the value in a global variable 
    filter = "{" + arr.join(",") + "}"; 

    console.log(filter); 
}); 
+0

謝謝您的回覆。但我沒有做到。我需要一些幫助。我使用了下面的代碼塊。我如何在全局變量中保存一個值?再次感謝

var filter = null; \t \t \t \t \t \t \t \t var formcheckbox = this.getFormcheckbox(); \t \t \t \t formcheckbox.on('change', function(checkbox, value){ \t \t \t \t \t var arr = [], \t \t \t \t \t i, \t \t \t \t \t max; \t \t \t \t \t \t \t \t \t \t \t \t \t \t for (i = 0, max = 5; i <= max; i++) { \t \t \t \t \t \t arr.push(value["val" + i]); \t \t \t \t \t } \t \t \t \t \t \t \t \t \t \t \t \t \t \t filter = "{" + arr.join(",") + "}"; \t \t \t \t \t \t \t \t \t return filter; \t \t \t \t \t \t \t \t \t }); \t \t \t \t \t \t \t \t console.log(filter);
anarchos78

+0

你做任何其他變量(全局或不)。 'var x = ...'在這種情況下'filter'將爲空,除非您的'change'處理程序被調用。 – Andreas

+0

當我檢查任何(一個或多個)複選框時,更改處理程序被觸發。但是當我console.log(過濾器)它輸出「空」。我錯過了什麼?請幫忙。謝謝 – anarchos78

3

只需將filter傳遞給將使用它的函數。如果您想要發生某些事情,您必須從change處理程序中調用它:

formcheckbox.on('change', function(cb, value){ 
    //... 
    var filter = "{" + arr.join(",") + "}"; 
    useFilter(filter); 
}); 


function useFilter(filter){ 
    // use the `filter` var here 
} 
+0

非常感謝您的關注。我試過這個:

formcheckbox.on('change', function(checkbox, value){ \t \t \t \t \t \t \t \t var arr=[]; \t \t \t \t \t \t \t for (var i in value) { \t \t \t \t \t arr.push(value[i]) \t \t \t \t }; \t \t \t \t \t \t \t \t var wrd = new Array(arr); \t \t \t \t \t var joinwrd = wrd.join(","); \t \t \t \t \t \t var filter = '{' + joinwrd + '}'; \t \t \t \t \t \t \t \t \t \t \t \t //console.log(filter); \t \t \t \t \t \t useFilter(filter); \t \t \t \t \t \t \t \t \t \t \t //Ext.Msg.alert('Output', '{' + joinwrd + '}'); \t \t \t \t \t \t \t \t }); \t \t \t var a = function useFilter(filter){ \t \t \t \t //console.log(filter); \t \t \t \t return filter; \t \t \t }; \t \t \t \t \t \t \t \t console.log(a);
但它給了我一個錯誤。幫幫我 – anarchos78