【问题标题】:Use "event's" output as a variable使用“事件的”输出作为变量
【发布时间】:2012-05-26 15:31:55
【问题描述】:

我在操作复选框值时遇到问题。复选框上的“更改”事件返回一个对象,在我的例子中:

{"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 过滤器”产生:{member,book,journal,new_member,cds})以在其他地方使用它。我试图使整个事件成为一个变量(var output = “the change event”),但它不起作用。

也许这是一个愚蠢的问题,但我是新手,我需要一点帮助。

提前谢谢你,

汤姆

【问题讨论】:

    标签: javascript variables object extjs extjs4


    【解决方案1】:

    只需将filter 传递给将使用它的函数。无论如何,如果您想要发生某些事情,您必须从 change 处理程序内部调用它:

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

    【讨论】:

    • 非常感谢您的关注。我试过这个:
      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); useFilter(filter); //Ext.Msg .alert('输出', '{' + joinwrd + '}'); }); var a = function useFilter(filter){ //console.log(filter);返回过滤器; }; console.log(a);
      但它给了我一个错误。帮助
    【解决方案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);
    });
    

    【讨论】:

    • 感谢您的回复。但我没有成功。我需要帮助。我使用了下面的代码块。如何在全局变量中保存值?再次感谢
      var filter = null; var formcheckbox = this.getFormcheckbox(); formcheckbox.on('change', function(checkbox, value){ var arr = [], i, max; for (i = 0, max = 5; i 
    • 您可以像使用任何其他变量(全局或非全局变量)一样执行此操作。 var x = ... 在这种情况下,filter 将为 null,除非您的 change-handler 被调用。
    • 当我选中任何(一个或多个)复选框时会触发更改处理程序。但是当我 console.log(filter) 它输出“null”。我错过了什么?请帮忙。谢谢
    • 您是否点击了console.log(filter) 之前的复选框?单击复选框时是否执行事件处理程序?看看this fiddle,或许有助于理解/测试。
    • 我不得不承认你是个绅士。你对新手很有耐心。非常感谢。好好的。汤姆
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多