Javascript 在生成的元素上绑定事件并获取其当前状态

Javascript 在生成的元素上绑定事件并获取其当前状态,javascript,jquery-plugins,closures,jquery,Javascript,Jquery Plugins,Closures,Jquery,这里有一个插件,它绑定元素上的单击事件,它生成一个带有的容器,然后我在这个新的上绑定一个按键事件,一切正常,但在按键处理程序中,我只能获得文本()的状态.length从初始单击时开始 如何获取onKeyPress函数以获取按键时的状态 $.fn.pluginTemp = function(options){ var defaults = { editContainer:"<div class='editContainer'><textarea&g

这里有一个插件,它绑定元素上的
单击事件,它生成一个带有
的容器,然后我在这个新的
上绑定一个
按键事件,一切正常,但在
按键处理程序中,我只能获得
文本()的状态.length
从初始
单击时开始

如何获取onKeyPress函数以获取
按键时
的状态

$.fn.pluginTemp = function(options){
    var defaults = {
            editContainer:"<div class='editContainer'><textarea></textarea></div>",
            maxChar:20,
            onKeyPress:function(){
                    console.log($(".editContainer>textarea").text())
               }

     }
    var options = $.extend(defaults,options); 
    return this.each(function(i,e){
        var el = $(e), initText
        el.bind("click", function(){
            initText = el.text();
            el.parent().append(options.editContainer);
            el.parent().find(".editContainer>textarea").html(initText);
              // isn't this function remembering the state for when its is defined?  which is on keypress?          
               return function(){
                el.parent().find(".editContainer>textarea").bind("keypress",options.onKeyPress)
            }()

        })
    })
}
$.fn.pluginTemp=函数(选项){
var默认值={
编辑容器:“”,
maxChar:20,
onKeyPress:function(){
console.log($(“.editContainer>textarea”).text()
}
}
var options=$.extend(默认值,选项);
返回此。每个(函数(i,e){
变量el=$(e),initText
el.bind(“单击”,函数(){
initText=el.text();
el.parent().append(options.editContainer);
el.parent().find(“.editContainer>textarea”).html(initText);
//这个函数不记得定义它时的状态吗?它是在按键上的吗?
返回函数(){
el.parent().find(“.editContainer>textarea”).bind(“keypress”,options.onKeyPress)
}()
})
})
}
您可以尝试:

return this.each(function(i,e){
            var el = $(e), initText
            el.live('click', function() {
                initText = el.text();
                el.parent().append(options.editContainer);
                el.parent().find(".editContainer>textarea").html(initText);
                  // isn't this function remembering the state for when its is defined?  which is on keypress?          
                   return function(){
                    el.parent().find(".editContainer>textarea").bind("keypress",options.onKeyPress)
                }()

            })
        })
尚未测试抱歉

您可以尝试:

return this.each(function(i,e){
            var el = $(e), initText
            el.live('click', function() {
                initText = el.text();
                el.parent().append(options.editContainer);
                el.parent().find(".editContainer>textarea").html(initText);
                  // isn't this function remembering the state for when its is defined?  which is on keypress?          
                   return function(){
                    el.parent().find(".editContainer>textarea").bind("keypress",options.onKeyPress)
                }()

            })
        })
还没有测试抱歉我有问题

而不是通过
.html()
方法获取当前值, 我使用了
.val()

原因如下: 当在
上使用
.html()
方法时,它只查看
文本区域的初始状态,当您使用
.val()
时,它会对最新的值进行采样。

我遇到了问题

而不是通过
.html()
方法获取当前值, 我使用了
.val()

原因如下:
.html()
方法在
上使用时,仅查看
文本区域的初始状态,当您使用
.val()
时,它会对最新的值进行采样。

您可能想检查按键上的.live()方法-
live
?另外,有没有一种方法可以通过闭包来实现这一点?您可能需要检查按键上的.live()方法-
live
?另外,有没有一种方法可以通过闭包来实现这一点?如果使用.live(),则会得到相同的结果,因为函数是在触发事件时执行的。换句话说,在keypress事件中使用它会在当时生成html。但是,嘿,.val()也可以工作,而且更简单:)如果使用.live(),则会得到相同的结果,因为函数是在触发事件时执行的。换句话说,在keypress事件中使用它会在当时生成html。但是,嘿,.val()也可以工作,而且更简单:)