簡體   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