操作复选框值时遇到问题。复选框上的“更改”事件返回一个对象,在我的情况下:
{"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 filter”产生:{member,book,journal,new_member,cds})在其他地方使用它。我试图将整个事件变成一个变量(var output =“change event”),但它不起作用。
也许这是一个愚蠢的问题,但我是一个新手,我需要一些帮助。
提前谢谢你,
汤姆
答案 0 :(得分:3)
只需将filter
传递给将使用它的函数。如果你想要发生一些事情,你必须从change
处理程序内部调用它:
formcheckbox.on('change', function(cb, value){
//...
var filter = "{" + arr.join(",") + "}";
useFilter(filter);
});
function useFilter(filter){
// use the `filter` var here
}
答案 1 :(得分: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);
});