调用事件侦听器 - 两种方式之一起作用,有什么区别
Calling event listeners - one of two ways works, what's the differnce?
这种方式不起作用(元素从函数中的 with 拉入(。
function styleTwitter1( pair_array )
{
var i;
var input;
var label;
var font_size;
for ( i = 0; i < pair_array.length; i+=2 )
{
/*
*/
input = document.getElementById( pair_array[ i ] );
label = document.getElementById( pair_array[ i + 1 ] );
/*
*/
label.fontSize = window.getComputedStyle( label, null ).getPropertyValue("font-size");
/*
*/
input.addEventListener( "keypress", function()
{
label.style.opacity = 0;
}, false );
/*
*/
input.addEventListener( "focus", function()
{
if( input.value === '' )
{
label.style.opacity = 0.2;
input.style.border = '1px solid #888888';
}
} , false );
/*
*/
input.addEventListener( "blur", function()
{
if( input.value === '' )
{
label.style.opacity = 1;
new EffectsFont( label ).fade( 'up', 150 );
input.style.border = '1px solid #dddddd';
}
} , false );
/*
*/
}
}
但是,这种方式确实如此(元素是从函数外部注入的(。
function initTwitterStyle( input, label )
{
/*
*/
input.addEventListener( "keypress", function()
{
label.style.opacity = 0;
}, false );
/*
*/
input.addEventListener( "focus", function()
{
if( input.value === '' )
{
label.style.opacity = 0.2;
input.style.border = '1px solid #888888';
}
}, false );
/*
*/
input.addEventListener( "blur", function()
{
if( input.value === '' )
{
label.style.opacity = 1;
new EffectsFont( label ).fade( 'up', 150 );
input.style.border = '1px solid #dddddd';
}
}, false );
/*
*/
}
如果我无法弄清楚区别,我最终会做的是将我的数组循环拉到外面,然后用元素注入 twitterStyle2。
目前,我无法获得错误代码,但只有一对正在初始化。然后效果字体不起作用。
Jshint 警告不要在循环中创建函数,但我不明白为什么? 问题出在哪里?
您有一个闭包问题。处理程序对变量 label
进行闭包。但是,当循环完成时,label
将是最后一个元素 - 所有处理程序在触发时都会label
视为最后一个元素。
我称之为冻结闭包变量,基本上是通过使用自调用函数来创建不共享的新闭包。
var divs = [...];
for (var i=0; i < 10; i++) {
// Here's the self calling function
div.onclick = (function(i){
return function() {
console.log("Clicked div with index" + i);
}
})(i);// Passing the variable to the self calling function creating a new closure
}
但是,我的首选方法是使用 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
var divs = [...];
for (var i=0; i < 10; i++) {
div.onclick = (function(i) {
console.log("Clicked div with index" + i + "and id" + this.id );
}
}).bind(div, i);
}
相关文章:
- AngularJS ng include won'不知什么原因不起作用
- 我需要一种自动调整iframe大小的方法,无论我查到什么,它都不起作用
- 是什么让这个简单的递归不起作用
- 角度灯箱不起作用.我做错了什么
- JavaScript - 为什么这不起作用?我看不出有什么区别
- 用于导出Excel的.Net MVC 4.5 JqGrid按钮功能不起作用.什么'我的代码错了
- AJAX请求不起作用,莫名其妙,有什么新眼光来看它
- JavaScript id 选择器不起作用?不知道出了什么问题
- 我的js分页代码不起作用,完全不知道是什么原因造成的
- 我的JavaScript代码有什么问题?它在IE8中不起作用
- 是什么原因导致 Blogspot 中的 Google+ 评论在某些页面上不起作用
- ng路由不起作用.我不知道错误是什么,因为控制台中没有显示任何内容
- Javascript viewport then element.style.left 不起作用?这有什么问题
- 以下语法有什么问题:它不起作用
- 为网站添加增强功能(无论是通过 C#、Chrome 扩展程序等)——不确定什么会起作用
- 我的 Jquery 按钮 - 禁用/启用功能不起作用.谁能告诉我出了什么问题
- 我网页上的 JavaScript 在 IE 9 中不起作用有什么原因吗?
- 手风琴一样的形式,对我不起作用,谁能看到我在这里做错了什么.
- 引导程序下拉不起作用.什么都试过了..(引导2.3.2)
- JS getElementsByClassName(ClassName) 不起作用:什么也没发生