Javascript 观察DOM中动态插入的对象上的事件
加载时,我在页面上的所有文本区域中添加所需的行为Javascript 观察DOM中动态插入的对象上的事件,javascript,prototypejs,dom-events,Javascript,Prototypejs,Dom Events,加载时,我在页面上的所有文本区域中添加所需的行为 Event.observe(window, 'load', function() { $$('textarea').each(function(x) { x.observe('keydown', dosomethinghere) }); }); 这是因为textareas已经在DOM中,但是我应该如何处理页面加载后动态添加的textareas(例如:如果我有一个按钮显示“添加更多”)。我希望这些新创建的文本区域具有相同的行为 考
Event.observe(window, 'load', function() {
$$('textarea').each(function(x) {
x.observe('keydown', dosomethinghere)
});
});
这是因为textareas已经在DOM中,但是我应该如何处理页面加载后动态添加的textareas(例如:如果我有一个按钮显示“添加更多”)。我希望这些新创建的文本区域具有相同的行为 考虑使用。考虑使用。$.live()会像STAii提到的那样工作,但也有。这可能会有更大的好处,这样您就不必再添加其他库。$.live()可以像STAii提到的那样工作,但也有。这可能会有更多的好处,因此您不必再添加另一个库。嗯,答案有点棘手。唯一的方法是为您的textareas维护一个事件侦听器缓存。将新文本区域添加到页面时,需要调用Event.stopObserving来查看所有缓存的事件。然后调用$$('textarea')。再次调用每个(…)代码以绑定到所有元素 谢天谢地,有人已经在一个名为lowpro的非常方便的轻量级原型扩展中为您做到了这一点: 您可以随心所欲,只需:
Event.addBehavior({
'textarea:keydown': function(e) {
dosomethinghere(); // e.g. this.hide();
}
});
然后,无论何时动态添加新的textarea,只需调用Event.addBehavior.reload()
我应该指出,“e”是事件对象,“this”是函数(e){}定义上下文中的元素。唯一的方法是为您的textareas维护一个事件侦听器缓存。将新文本区域添加到页面时,需要调用Event.stopObserving来查看所有缓存的事件。然后调用$$('textarea')。再次调用每个(…)代码以绑定到所有元素 谢天谢地,有人已经在一个名为lowpro的非常方便的轻量级原型扩展中为您做到了这一点: 您可以随心所欲,只需:
Event.addBehavior({
'textarea:keydown': function(e) {
dosomethinghere(); // e.g. this.hide();
}
});
然后,无论何时动态添加新的textarea,只需调用Event.addBehavior.reload()
我应该指出,“e”是事件对象,“this”是函数(e){}定义上下文中的元素。我这样做的方式是在添加新的textarea时观察它,如下所示:
function doSomethingWithTextAreas(){
//do something.
}
document.observe("dom:loaded", function() {
$$('textarea').each(function(s){
s.observe('keydown', doSomethingWithTextareas);
});
$('add_more').observe('click', function(){
textarea = new Element('textarea');
textarea.observe('keydown', doSomethingWithTextareas); //Observes the new textarea.
Element.insert($('textarea_container'), {bottom:textarea});
});
});
我的方法是在添加新文本区域时观察它,如下所示:
function doSomethingWithTextAreas(){
//do something.
}
document.observe("dom:loaded", function() {
$$('textarea').each(function(s){
s.observe('keydown', doSomethingWithTextareas);
});
$('add_more').observe('click', function(){
textarea = new Element('textarea');
textarea.observe('keydown', doSomethingWithTextareas); //Observes the new textarea.
Element.insert($('textarea_container'), {bottom:textarea});
});
});
这样做的一个好方法是让javascript函数添加文本区域,触发任何其他函数都可以观察和处理的事件。因此:
function add_textarea() {
// Code creates a new <textarea> and adds it to the page
var textarea = new Element("textarea");
$("some-form").insert(textarea);
textarea.fire("textarea:add")
}
document.observe("textarea:add", function(event) {
event.target.observe('keydown', dosomethinghere);
});
函数add_textarea(){
//代码创建一个新文件并将其添加到页面中
var textarea=新元素(“textarea”);
$(“某种形式”)。插入(文本区域);
textarea.fire(“textarea:add”)
}
记录。观察(“文本区域:添加”,函数(事件){
事件。目标。观察('keydown',dosomethinghere);
});
这允许您的两个函数——一个添加新的textarea,另一个附加观察者——松散耦合,彼此互不了解。一方只需触发另一方可以观察到的自定义事件 一个很好的方法是让添加文本区域的javascript函数触发一个任何其他函数都可以观察和处理的事件。因此:
function add_textarea() {
// Code creates a new <textarea> and adds it to the page
var textarea = new Element("textarea");
$("some-form").insert(textarea);
textarea.fire("textarea:add")
}
document.observe("textarea:add", function(event) {
event.target.observe('keydown', dosomethinghere);
});
函数add_textarea(){
//代码创建一个新文件并将其添加到页面中
var textarea=新元素(“textarea”);
$(“某种形式”)。插入(文本区域);
textarea.fire(“textarea:add”)
}
记录。观察(“文本区域:添加”,函数(事件){
事件。目标。观察('keydown',dosomethinghere);
});
这允许您的两个函数——一个添加新的textarea,另一个附加观察者——松散耦合,彼此互不了解。一方只需触发另一方可以观察到的自定义事件