繁体   English   中英

如何使事件监听器更改javascript代码中的变量?

[英]How to make event listener to change a variable inside javascript code?

我以传统方式设置了一些事件监听器,如下所示:

<script>    
window.onload = setup;
function(setup) {
    var myButton = document.getElementById("myButton");
    myButton.onclick = someFunction;
}

我想要someFunction要做的是更改代码中的某个变量(当然,当按下按钮时)。 例如,假设我的代码中有一个包含变量x something()函数,并且事件监听器处于活动状态。

function something() {
var x;
for (;;) {
    if (x === value set by someFunction) {
        break;
        }
    }
}

我怎样才能做到这一点?

触发事件后,您可以执行以下操作:

   CODE CODE CODE
   ....
    var x = INITIAL_VALUE;
    function someFunc(){
        x = what ever you wish;
    }

简单的方法是使x成为全局变量。

如果您不想污染全局名称空间,请使用立即执行的函数:

(function() {
    var x;
    function someFunc() {
        // May assign x
    }
    function setup() {
        var myButton = document.getElementById("myButton");
        myButton.onclick = someFunction;
    }
    window.onload = setup;
    function something() {
        // Use x
    }
})();

此函数为x变量创建一个本地名称空间。

如果我理解您的问题,最简单的方法是定义一个全局变量var value ,这样someFunction()something()都可以访问它。

没有任何侦听器的另一种方法可能是:

function something() {
var x;
for (;;) {
    if (x === someFunction()) {
        break;
        }
    }
}

function someFunction() {
  ...
  return value;
}
//
//  try a 'notifier' decorator
//
function notifier( handler_fn, callback_fn ) {


    // #helpers
    function slc( args, i1, i2 ) {
        return Array.prototype.slice.call( args, i1, i2 );
    }
    function prepend( targetArr, arr ) {
        Array.prototype.unshift.apply( targetArr, arr );
        return targetArr;
    }
    function thepush( targetArr, arr ) {
        Array.prototype.push.apply( targetArr, arr );
        return targetArr;
    }



    return ( function( cb, args1 ) {

        var origfn = this;

        return function() {

            var
                args = prepend( slc( arguments ), args1 ),
                out  = origfn.apply( this, args );

            cb.apply( this, thepush( args, [out] ) );

            return out;

        };

    } ).call( handler_fn, callback_fn, slc( arguments, 2 ) );

}



var
    handlerfn = function ( e ) {
                    var
                        T = e.type.toUpperCase();
                    ( this instanceof Node ) && ( this.innerHTML = T );
                    return T;
               },
    F = notifier(
                    handlerfn,
                    function ( f1_in, f1_out ) {

                         var
                            v1 = f1_in;

                         v1.target.innerHTML += ',  coords:[' + v1.clientX + ', ' + v1.clientY +']';

                         console.log( f1_in, ', ', f1_out );
                    }
                );

document.getElementById('btn_01').onclick = F;
//
//

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM