Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 观察DOM中动态插入的对象上的事件_Javascript_Prototypejs_Dom Events - Fatal编程技术网

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,另一个附加观察者——松散耦合,彼此互不了解。一方只需触发另一方可以观察到的自定义事件