Asp.net 在创建DOM元素时运行函数

Asp.net 在创建DOM元素时运行函数,asp.net,jquery,dom-manipulation,Asp.net,Jquery,Dom Manipulation,我想在DOM中创建匹配对象时将事件绑定到特定的类和ID 我这样做是因为我在ASP UpdatePanel中有一些jQuery代码,这会导致在部分回发时重新加载DOM。我已经用live()重置了事件,但是我需要在创建元素后立即调用两行初始化函数 是否有任何方法可以将其附加到live()或其他jQuery函数,或者我必须自己编写代码才能完成此操作 谢谢,Ed如果您使用的是UpdatePanel,您可以编写一个名为: function pageLoad() { } //Called by ASP.Ne

我想在DOM中创建匹配对象时将事件绑定到特定的类和ID

我这样做是因为我在ASP UpdatePanel中有一些jQuery代码,这会导致在部分回发时重新加载DOM。我已经用live()重置了事件,但是我需要在创建元素后立即调用两行初始化函数

是否有任何方法可以将其附加到live()或其他jQuery函数,或者我必须自己编写代码才能完成此操作


谢谢,Ed

如果您使用的是UpdatePanel,您可以编写一个名为:

function pageLoad() { } //Called by ASP.Net javascript code
每次页面初始加载和加载UpdatePanel内容时都会调用该函数,或者,您可以通过执行以下操作来连接UpdatePanel返回时要运行的任何函数:

$(document).ready(function() {
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myFunction);
});
function myFunction() {
 //Do stuff with elements
}

注意,这不会运行第一页加载,仅在UpdatePanel加载上运行。只需添加对
myFunction()的调用,如果您需要它也在加载时运行。

每当将节点添加到DOM时,都会触发
DOMNodeInserted
事件。让文档主体侦听此事件,并且无论何时触发,都要在插入的节点中搜索您要查找的类和ID选择器

$(document.body).bind("DOMNodeInserted", function(event) {
    // element is the newly inserted node
    var element = $(event.target);
    // if this element is of interest
    if($("<selector>", element).length > 0) {
        // run the initialization code here..
    }
}
$(document.body).bind(“域节点插入”),函数(事件){
//元素是新插入的节点
var元素=$(event.target);
//如果对该元素感兴趣
如果($(“”,元素).length>0){
//在此处运行初始化代码。。
}
}

阅读有关DOM突变事件的更多信息。

抱歉,忘了提及这是一个非页面特定的网络控件,因此我不想在页面本身附加任何代码:我知道在updatepanel中回发后刷新脚本的方法(尽管我以前没有看到您的后一个选项),但这不是我要使用的方法。理想情况下,此代码不应依赖外部方法来减少依赖关系。@Ed-我在需要UpdatePanel的地方执行此操作,但不必在页面中,这是可以在任何外部或注册的javascript文件中使用的第二组代码,它可以正常工作,只需获取
Sys.W即可ebForms.PageRequestManager.getInstance()
检查是否为null,如果不是,则调用
.add\u endRequest(myFunction)
在它上面,无论是否有UpdatePanel,甚至ScriptManager,它都可以工作。你只是为你关心的确切事件注册了一个处理程序……没有比这更有效的了。嗯,是的。肯定比Anurag的解决方案更有效,我会尝试一下。嗯,该代码确实在第一次加载页面时执行,而不是在ards,似乎没有添加事件。我已向函数(clientID)添加了一个参数,这可能是问题的原因吗?@Ed-是的,事件处理程序不能有这样的变量,clientID从哪里来,这不是回发后可以确定的吗?我喜欢,但效率会有多高?插入的内容将被解析以构造DOM节点。这是不可避免的。如果您担心jQuery的选择器引擎的效率,那么你应该考虑你做的DOM插入的频率和多少。在我的机器上,通常在一两毫秒内完成此特定页面-
http://mootools.net/slickspeed/system/template.php?include=jquery.js&function=$&nocache=1268138473
。我想说这真的很大。在你的情况下可能不是这样。我理解这一点,但我有点担心这会在每次点头时被调用e插入,这可能会增加很多调用(一些页面上使用的是一页上有400种以上产品的产品目录,所有这些产品都是动态绑定的)。如果您执行400次,1ms仍然是很多:)上面的链接使用的是jQuery1.2.6,它没有使用更新的Sizzle选择器引擎,据称该引擎速度快了50%。这里更新的测试-如果你有那么多的产品,你根本不应该做单独的插入,特别是对于那些不想离开IE但仍然想要生活中所有美好事物的人。相反,将其组合成一个大块,并使用innerHTML或DocumentFragment附加到DOM中。