1. 程式人生 > >js 點選事件回撥函式傳參

js 點選事件回撥函式傳參

點選事件回撥函式傳參

使用匿名函式

function testFun(event, str) {
	console.log(str);
}

var test = document.getElementById('test');
test.addEventListener('click', function(event) {
	testFun(event, 'this is a test');
});

上面的例子給元素繫結點選事件函式的時候,使用了匿名函式,在匿名函式裡面再呼叫testFun函式,這樣可以方便給testFun函式傳入引數,但這個方法看起來是那麼的傻,最致命的是無法給元素解綁點選事件處理函式,實為下策!

使用bind方法

function testFun(str, event) {
	console.log(str);
	console.log(event.target === this);
}

var test = document.getElementById('test');
test.addEventListener('click', testFun.bind(test, 'this is a test'));

上面的例子中,使用bind方法來給testFun函式指定this值和引數,這樣也能達到給回撥函式傳入引數的效果,看起來會更優雅一點。但值得注意的是回撥函式的最後的一個引數才是event物件。同時,這個方法依然無法解綁事件處理函式,且在IE9以下不被支援。

JQuery方法

function testFun(event, str) {
	console.log(event.data.str);
	$(this).unbind('click', testFun);
}

$('#test').click({str: 'this is a test'}, testFun);

上面是使用jQuery的方法,注意,如果click事件不用傳入第一個引數,那麼就會當成一個模擬click事件。此方法將click第一個引數當成了event物件的一個data屬性,在事件處理函式中就能夠使用到傳入引數,最主要的是可以通過jQuery本身的unbind方法解綁事件處理函式。