2014-11-09 26 views
1

我有一个HTML控件列表,我需要将一个监听器绑定到这两个事件中的每一个。一旦触发了,一些其他行动应该在一段时间后被启动。我正在使用setTimeout

$(".TextBoxClass").each(function() { 
    $(this).keyup(function() { 
    alert("Id = " + $(this));  
    setTimeout(function() { 
     alert("current Id = " + $(this)) 
    }, 50); 
    }) 
}) 

第一alert消息显示哪个触发事件keyup控制的正确idsetTimeout内的第二个alert表示current id = [object][object]

如何访问setTimeout回调函数中的控件?

回答

0
<div id="controls"> 
    <input class="TextBoxClass" type="text" value="1" id="id-1"> 
    <input class="TextBoxClass" type="text" value="2" id="id-2"> 
    <input class="TextBoxClass" type="text" value="3" id="id-3"> 
    <input class="TextBoxClass" type="text" value="4" id="id-4"> 
    <input class="TextBoxClass" type="text" value="5" id="id-5"> 
    </div> 


$('#controls').on('keyup', '.TextBoxClass', function() { 
    var $this = $(this); 

    setTimeout(function(){ 
    // alert("current value = " + $this.val()); 
    alert("current element id = " + $this.attr('id')); 
    }, 50); 
}); 

http://jsbin.com/yisore/1/

http://jsbin.com/yisore/1/edit

0

“这个”标识超出的setTimeout method.Try范围内的对象引用存储在一个变量,在这个例子中使用的setTimeout方法里面像...

$(".TextBoxClass").each(function(){ 
    var obj = $(this); 

    $(this).keyup(function() { 
     alert("Id = "+ obj); 
     setTimeout(function(){ 
      alert("current Id = " + obj)}, 50); 
    }); 
}); 
0

你为什么不在这里处理事件函数时只需使用事件对象。

$(".TextBoxClass").each(function() { 
    $(this).keyup(function (e) { 
     alert(e.target); 
     setTimeout(function() { 
      alert(e.target); 
     }, 50); 
    }); 
}); 

查看关于jQuery event object的文档。

0

关键字this的值取决于您的功能范围。在外部函数范围中,this是触发事件的DOM元素。在您的setTimeout范围内,它是全球的window对象。存储在外部函数范围,你的DOM元素的引用,并使用以后提醒ID时:

$(".TextBoxClass").keyup(function() { 
    var self = this; 
    alert("Id = " + self.id); 
    setTimeout(function() { 
     alert("current Id = " + self.id) 
    },50); 
}); 

而且,没有理由做任何迭代。 keyup可以一次绑定到所有元素。

相关问题