JQuery事件侦听器是否在包含<;的动态加载内容中注册;脚本>;小推车?

JQuery事件侦听器是否在包含<;的动态加载内容中注册;脚本>;小推车?,jquery,ajax,google-chrome,event-listener,dynamic-loading,Jquery,Ajax,Google Chrome,Event Listener,Dynamic Loading,好吧,这是一个令人困惑的标题。让我们试着把它分解一下 我在$(document.ready)中有一个事件监听器,在主体上监听下拉列表的更改,并在更改时调用函数。update函数进行AJAX调用,更改服务器端变量,触发其他侦听器(使用JSlocation.href=…更改页面,并在设置更多服务器端变量后最终重新加载原始页面) 事件监听器:$('body')。打开('change','#dropdown',updateFunction) 此事件侦听器位于动态加载到“索引”页面的HTML内容的标记中

好吧,这是一个令人困惑的标题。让我们试着把它分解一下

我在$(document.ready)中有一个事件监听器,在主体上监听下拉列表的更改,并在更改时调用函数。update函数进行AJAX调用,更改服务器端变量,触发其他侦听器(使用JS
location.href=…
更改页面,并在设置更多服务器端变量后最终重新加载原始页面)

事件监听器:
$('body')。打开('change','#dropdown',updateFunction)

此事件侦听器位于动态加载到“索引”页面的HTML内容的
标记中

第一次加载索引页并使用下拉列表时,事件侦听器会完美地调用updateFunction,发挥其神奇作用,重新加载页面,然后再次注册侦听器。下拉列表的后续使用有时(很少/前后不一致)会发挥其魔力,重新加载页面,但不会再次注册侦听器。。。 使用Chrome检查事件监听器可以确认它不存在,但是查看源代码可以确认在成功加载和随后失败的重新加载之后代码是相同的

当在注册侦听器的周围放入一些
console.log()
语句时,我注意到如果log语句来自索引页,则侦听器已正确注册。当同一日志语句来自Chrome的VMxxxx页面时,侦听器未注册,页面无法运行

在我试图解决这一问题的过程中,我发现了以下引语:

无论何时通过AJAX加载HTML内容,并且该内容包含标记,都将使用eval()对脚本进行评估,并由Chrome的Sources视图识别为以“VM”开头的新文件。

这让我想知道,在动态加载的包含标记的内容中注册的JQuery事件侦听器(作为来自VMxxxx的标记登录到Chrome控制台)是否不可靠或有缺陷

谢谢你耐心地走到这一步。你能想出一个原因吗?在使用下拉菜单重新加载页面时,监听器不会被注册一小部分时间

更新 根据要求,我将尝试添加一个我正在做的示例。我很抱歉,这没用。“猜测”正是我所要求的,因为没有人马上说“哦,是的,那是有缺陷的”,我觉得这不是有缺陷的

我在一个ColdFusion网站上工作,每个页面都是由不同的文件片段根据几十种情况构建的。大多数页面是一个“索引”,包含一个“selectionBar”(下拉元素)、一个静态内容div和一系列动态内容div(有时由服务器插入,有时在AJAX调用返回后插入)

有关页面大致如下:

index.cfm
/“主页”,其中包括标准HTML和JS库的layout.cfm,另一个用于_permissionCheck的.cfm,另一个用于_selectionBar的.cfm,一个包含_mainContent的另一个.cfm的div,以及一个监听“cChanged”的标记,该标记重新加载_mainContent的div,以及(如果条件为true)重新加载整个索引页

//准备0-3个下拉元素,每个元素都是自定义的cf_标记元素,当加载完内容时触发“xloated”,当所选选项更改时触发“xChanged”,并侦听前一个元素的“xloated”,这表明需要重新加载。第一个在更改时触发“aChanged”,重新加载第二个,在加载完成时触发“bLoaded”(触发第三个重新加载),在更改时触发“bChanged”;第三个在加载完成时触发“cLoaded”,在更改时触发“cChanged”。正是这个cLoaded重新加载了主内容和整个页面。(并非总是按预期工作)

//包括少量其他.cfm文件和一个main.cfm文件(一次)。main.cfm代表一个排序向导,引导您完成1-4个“步骤”,当您点击“下一步”按钮时显示下一步(该按钮提交当前步骤的表单,重新加载index.cfm,并显示下一步的表单)。每个步骤都是另一个.cfm页面,有自己的和标记以及链接的JS文件


希望这能让泥巴更清晰一点。

你能加上一个简单的例子来说明你的意思吗?在我们知道我们在处理什么之前,一切都是猜测。不清楚你在做什么。您说您正在重新加载页面,但您提到使用AJAX加载内容。你到底在做什么?当你使用事件委派时,事件监听器被附加到
主体
元素(在本例中),而不是
#下拉列表
。@Barmar我更新了内容,希望提供更多的信息,但我只希望增加更多的混乱。我对像这样使用事件委托的理解是,将侦听器附加到包含#dropdown元素的body元素,可以销毁和重新创建下拉列表,而无需重新创建侦听器。我同意你的评论,但我不确定我是否理解你试图警告我的内容。你的更新不可读,因为你没有在文本中的HTML标记周围加回记号。我开始编辑,但文字太多了。我们确实需要看到实际的代码,而不是描述,因为仍然很难理解您实际在做什么。