Javascript 从当前关注的文本区域记录值
假设我的页面上有许多Javascript 从当前关注的文本区域记录值,javascript,jquery,Javascript,Jquery,假设我的页面上有许多textarea元素,我的目标是记录我正在键入的当前textarea元素的值 我已经成功地编写了这样做的代码,但问题是,当在一个textarea中键入文本,然后切换到另一个并键入一段时间后,当我返回到第一个时,我会在该元素上附加两个.keyup()方法。所以我得到了两个textarea值的日志 $( "body" ).click( function( event ) { let element = event.target if( element.nodeName =
textarea
元素,我的目标是记录我正在键入的当前textarea
元素的值
我已经成功地编写了这样做的代码,但问题是,当在一个textarea
中键入文本,然后切换到另一个并键入一段时间后,当我返回到第一个时,我会在该元素上附加两个.keyup()
方法。所以我得到了两个textarea
值的日志
$( "body" ).click( function( event ) {
let element = event.target
if( element.nodeName === "TEXTAREA" ){
if($(element).focus()){
$(element).keyup(function(){
console.log(element.value)
})
}else {
$(element).unbind( 'keyup' )
}
}
});
要删除该方法堆栈,我需要做什么?您不应该将事件附加到另一个事件中,因为当第一次触发时,内部的事件将附加到另一个时间,依此类推 我建议将
input
事件直接附加到textarea
,而不是keyup
和嵌套事件,因此借助this
关键字,您将获得当前更改的textarea
元素,如:
$(“textarea”)。在('input',函数(event)上{
log($(this.val());
});代码>
我看到了两种解决方案。如果元素失去焦点,可以解除事件侦听器的绑定(此处需要侦听的应该是blur
事件)。但最好重写代码,使所有keyup事件侦听器都附加到页面加载上的文本区域(而不是像这里一样响应焦点)代码>你不应该将事件附加到另一个事件中
正在我脑海中响起。感谢您优雅的解决方案和精彩的解释