如何将其他变量传递给.addEventListener中的侦听器

时间:2016-09-15 10:46:38

标签: javascript events listener

我正在寻找一个将变量传递给函数的函数(除了通知e):

window.addEventListener("message", function(e));

6 个答案:

答案 0 :(得分:1)

您可以使用bind功能

document.getElementById('btn').addEventListener('click', add.bind(this,10,11));

function add(a,b){
    console.log(a,b)
}

答案 1 :(得分:1)

您可以使用.bind()添加n个自定义参数。它将按照.bind()

中的声明顺序提供
function myCallback(customArg, e) {
 ...
}

window.addEventListener("message", myCallback.bind(this, customArg), false);

function myCallback(customArg1,customArg2,customArg3,customArg4, e) {
  alert(customArg1 + " " + customArg2 + " " + customArg3 + " " + customArg4)
 }
$('button').click(myCallback.bind(this, 'hello', 'there', 'custom', 'args'))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click Me!</button>

答案 2 :(得分:0)

使用闭包。它将捕获变量并将其保留在处理函数的范围内。

function handler_factory(myVar) {
    function handler(e) {
        e.preventDefault();
        console.log(myVar);
    }

    return handler;
}

addEventListener("message", hander_factory("value of myVar"));

答案 3 :(得分:0)

你可以这样做 - 在回调函数中调用自定义函数。

window.addEventListener("message", function(e){ customFunction(e,variable) });

答案 4 :(得分:0)

你可以做类似的事情,并且用一个对象添加额外的参数甚至参数非常简单。

&#13;
&#13;
var element = document.querySelector('input');
element.addEventListener('click', handle_parameter, false);
element.customParam = 'Custom Param';

var object = {};
object.name = "Chris";
object.surname = "Beckett";

element.customParam2 = object;

function handle_parameter(evt){
  document.getElementById("param1").innerHTML = evt.target.customParam;
  document.getElementById("param2").innerHTML = evt.target.customParam2.name + " " + evt.target.customParam2.surname;  
}
&#13;
<input type="button" value="test" />

<p id="param1"></p>
<p id="param2"></p>
&#13;
&#13;
&#13;

答案 5 :(得分:-1)

在脚本中写下以下代码

var proxy = function (method, scope) {
            var aArgs = Array.prototype.slice.call(arguments, 2);
            return function () {
                return method.apply(scope, Array.prototype.slice.call(arguments, 0).concat(aArgs));
            };
    }

并调用您的事件监听器。在下面的代码中,您可以使用它只是您的实例或范围

  

window.addEventListener( “消息”,代理(YOURFUNCTIONNAME,为此,ARG1,ARG2,ARG3));