【问题标题】:Possible to manipulate javascript generated elements?可以操纵 javascript 生成的元素吗?
【发布时间】:2010-07-16 16:54:30
【问题描述】:

我有一个用 javascript 动态生成的页面,它包含几个输入字段和一个按钮。当我单击按钮时,什么也没有发生……是因为它是一个 javascript 对象而不是一个“真正的”dom 对象吗?如果是这样,有没有办法与对象进行交互?

我刚刚写了一个简单的警报来查看按钮是否正常工作。

jQuery("#button").click(function() {
   alert("yes it's working");
});

在第一页加载这工作...我相信在第一页加载它是 PHP 生成的,当我点击另一个部分时,这个相同的按钮会显示但页面不会刷新所以这让我相信当我点击另一个部分,它是用JS动态重新生成的。

现在如果我点击按钮,什么都不会发生...没有错误或警报...

【问题讨论】:

  • 你能显示你的代码吗?如果单击按钮,您必须指定会发生什么。如果你正确地创建了元素,它们就是“真正的”DOM 对象。
  • 欢迎来到 SO。请显示一些代码。一般来说,所有 DOM 对象都是平等的,无论它们来自 HTML 源代码还是 Javascript。
  • 您需要提供更多详细信息。应该发生什么?给出生成的示例,以及您对生成的 HTML 的期望。你生成的 HTML 应该和非生成的 HTML 一样,假设它是正确生成的。
  • JavaScript 生成的元素与所有其他元素进入相同的 DOM,因此没有区别。一些代码会很有帮助。
  • 感谢大家的超快速响应,我已经编辑了我的问题以更好地说明问题

标签: javascript dynamic object


【解决方案1】:

您需要使用.live,因为在您分配处理程序的时间点,该元素不存在。

$('#button').live('click', function() {
});

如果您出于效率目的使用多个元素执行此操作,您还应该查看委托。

【讨论】:

  • 为什么我没想到...我将使用 livequery,因为我已经加载了...谢谢这就是原因!!
【解决方案2】:

我想我明白你在说什么。

当您运行jQuery('#button') 时,它会在各处搜索元素。该事件附加到按钮本身,而不是查询字符串#button

然而,jQuery 确实提供了你想要的行为。

jQuery('#button').live('click', function () { /* on click event */ });

live 附加到查询字符串,而不是元素,因此它将应用于将来生成的任何 #button

【讨论】:

  • 为什么我没想到...我将使用 livequery,因为我已经加载了...谢谢这就是原因!!
  • @Rick - 请注意,较新版本的 jQuery 内置了 live,并且不需要插件 :)
  • 哦,真的吗?非常感谢...我将使用 live...当您说更新时,如 1.4.2 及更高版本?还是全部 1.4+?
  • @Rick - 它已经存在了一段时间了,apparently since 1.3
  • @Rick:还请注意,ID 必须是唯一的。您不能有多个 ID 为 button 的按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2012-12-31
  • 1970-01-01
  • 2021-02-02
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多