怎么用js或者jquery监控一个全变量改变后触发某给事件。
是这样的,我定义了一个全局变量
var a=0;
当a的值改变时,触发对应的事件。比如:
给a赋值a=1时调用function test1(){alert(1)}
给a赋值a=2时调用function test2(){alert(2)}
给a赋值a=3时调用function test3(){alert(3)}
请问各路高手怎么实现?
jQueryjs

解决方案 »

  1.   

    如果a的改变点可控,就可以用通知了(observer pattern)
    不可控的话就只能轮询了
      

  2.   

    function applyA(val){
        a = val;
        switch(val){
            case 1: test1(); break;
            case 2: test2(); break;
        }
    }我猜测你不是为了给A赋值,应该是有其他函数给A赋值,然后根据A的值去调用其他函数。
    如果你用JQuery1.7以上版本,可以这样:
    function eventHandle(val){
        switch(val){
            case 1: test1(); break;
            case 2: test2(); break;
        }
    };
    var events = $.Callbacks();
    callbacks.add(eventHandle);function otherFunction(){
        ........... // 私有的处理逻辑
        events.fire(1); // 触发回调函数
        ........... // 私有的处理逻辑
    }可以再进一步,把1、2、3、4定义成常量:var S_BEGIN = 1,S_RUNNING = 2, S_END=3;然后在Fire函数中使用常量,这样代码看上去就很舒服了:events.fire(S_BEGIN);
    events.fire(S_RUNNING);
    events.fire(S_END);
      

  3.   

    使用一个临时变量tempA,初始化和每次a值改变时把a值赋给tempA,然后所有的程序起始判断if(a==tempA){}...
      

  4.   


    //当全局变量a = 1时执行
    function test1(){
        alert(1);
    }//当全局变量a = 2时执行
    function test2(){
        alert(2);
    }//当全局变量a = 3时执行
    function test3(){
        alert(3);
    }var a = 0;
    function lisner(){
        if (a == 1){
          test1();
          clearInterval(lisnerID);
        }    if (a == 2){
          test2();
          clearInterval(lisnerID);
        }    if (a == 3){
          test3();
          clearInterval(lisnerID);
        }    if (a > 3){
            clearInterval(lisnerID);
        }
    }var lisnerID = setInterval(lisner,100);
    希望对你有帮助
      

  5.   

    最简单的方法是,在给a赋值的时候绑定一个事件。
    var a =0;
    /*很简单的一个方法,就实现了,你给a赋值的时候,绑定了一个事件,这个事件参数,event你可以自己传入一个函数。这样你以调用给a赋值的方法,set_a_value 就会执行这个绑定的事件*/
    var set_a_value = function(_a,event){
        a=_a;
        if(event){
           event();
        }
    };/**调用例子*/
    var test = function(){alert(a)}
    set_a_value(1,test);
    /**输出的值就是1*/
      

  6.   

    11 的想法很好,但是set_a_value这个方法,我必须要明确知道第一个参数是几,然后调用什么样的函数,但是真正用的时候,并不是这样的,a的值不确定,你这里必须要构造一个对象来存储 a的值和方法函数的对应关系。
      

  7.   

    你事实上你用的时候,a的值与调用的函数有没有关系,如果a的值与调用的函数没有关系的话,怎么去监听啊。如果a的值与调用的函数有关系是一个映射值的话,用我这个方法就可以实现啊。var map = {"1":test1,"2":test2,"3":test3};
    set_a_value(1,map["1"]);