【问题标题】:javascript or jQuery doesn't work in dynamically generated contentjavascript 或 jQuery 不适用于动态生成的内容
【发布时间】:2012-08-14 20:39:06
【问题描述】:

早起的人。如何让我的 javascript 或 jquery 在动态生成的内容中工作。

基本上,我已经根据用户在导航菜单上单击的内容创建了生成内容的网页。

我面临的问题:

  1. 当主页从 content-page 生成内容时,jquery 或 javascript 将不起作用。
  2. 但是当我单独打开内容页面时,一切正常。

通过搜索收集的信息:

jQuery.load() 方法会忽略与动态生成的内容一起出现的脚本标签。

所以我尝试以下方法:

  1. 将我需要的标签放在主页面中,而不是在内容页面中。它不起作用。好像 jquery 找不到内容元素,因为它们是动态生成的。
  2. 由于 jQuery.load() 忽略脚本标签,我尝试了纯 javascript ajax,如 w3schools.com 的教学方式,xmlhttp 方式,生成内容。它不起作用。
  3. 单击按钮时。控制台无响应。

示例contact.php

<script type="text/javascript">
$(function() {
    $("#submitUser").click(function(e) {
    var fname = $("#fname").val();
    $("#theresult").text(fname);
    e.preventDefault();
});
});
<form id="contactForm"> 
<label for='fname' >First Name</label><br/>
<input id="fname" type="text" name="fname" maxlength="100" />
</form>
<div id="theresult"></div>

当这个contact.php被动态生成到其他页面时,它不起作用。当我单击“提交”按钮时,控制台没有显示任何响应。好像 jquery 不存在。
但是当我在浏览器中单独打开它时,它可以工作。

【问题讨论】:

  • 重申您的问题。究竟是什么行不通?你做什么,你期望发生什么?您是否在浏览器中检查过错误控制台?报告了哪些错误?
  • 我的建议是制作一个非常小的测试页面来演示问题,以便您可以发布代码。你甚至可以通过这样做找到解决方案。你绝对可以使用从 ajax 返回的 javascript/jquery ......我昨天做了。您是否尝试过使用 jQuery 的 .html() 方法插入内容?
  • @AlexMA .html() 插入整个东西并且动态生成的jquery会起作用吗?我没试过。我现在去试试

标签: php javascript jquery dynamic-content


【解决方案1】:

对于动态生成的元素,您应该委托事件,您可以使用on 方法:

$(function() {
    $(document).on('click', '#submitUser', function(e) {
       var fname = $("#fname").val();
       $("#theresult").text(fname);
       e.preventDefault();
    });
});

live() 方法是deprecated。

【讨论】:

  • 感谢@undefined。这很好用。我正在考虑在第一次加载页面时减小 .js 文件的大小。所以我希望在用户导航到此页面时动态生成此语句。这可能吗?动态生成的内容中似乎不存在 jquery。谢谢XD
  • @TianLoon 欢迎您,您可以使用 jQuery $.getScript() 实用功能,但是这 4 行代码并不能帮助您缩小 js 文件的大小,您可以将代码发布到 @987654326 @ 用于缩小,那里有好人可以帮助你。
  • 再次感谢@undefined。我知道有 $.getScript() 和社区 codereview.stackexchange.com。我会在谷歌上搜索 .getScript() 并了解它是如何工作的。如果我有 .getScript() 的问题,我会回来。顺便说一句,以上 4 行只是问题的示例。它们实际上很长。 XD。但大小仍然只有几 KB。没关系。我想学习这个以备将来使用。 XD
  • 见鬼。 .on() 和 .getScript() 是我从 4 天前开始寻找的!非常感谢!
  • 哇,这很好地解释了我目前的问题。另外,将我的事件处理放在文档就绪语句中会正确委派事情吗?
【解决方案2】:

由于您的问题没有很好地描述,因此在这里暗中尝试,但也许您正在尝试使用.click() 等将事件绑定到动态加载到页面中的内容?

如果是这样,您可能想查看.on()。

【讨论】:

  • 使用on 代替不再支持的live。
  • 从 jQuery 1.7 开始,.on() 是所有事件处理程序的首选方法:api.jquery.com/on
  • @maxisam 领先我几秒钟。
  • @amber。你猜对了。这就是我想要实现的。谢谢。 .on() 实际上有效。但我还有一个问题。 >> 我正在考虑在第一次加载页面时减小 .js 文件的大小。所以我希望在用户导航到此页面时动态生成此语句。这可能吗?动态生成的内容中似乎不存在 jquery。谢谢XD
  • 和 +1 为之前声明的每个人 .live() 已弃用。你们让我 200% 不会使用 .live()。使用 .on() XD。我非常爱这个世界,这个世界上有这么多乐于助人的人!
【解决方案3】:

您需要使用直播活动。

例如,如果您生成的内容包含点击事件,您可以这样做:

$(".something").live("click", function({ 
// do something
)};

【讨论】:

  • live() 方法已弃用。
  • 嘿。这行得通!但只有当我把 $(".something").live("click", function({ 在主页中。在内容页面中呢?我的意思是作为一个生成的 jquery 脚本
【解决方案4】:

对于动态生成的字段,使用 .on() JQuery 方法:

$(document).on('click', '#MyID', function(e) {
    e.preventDefault(); // or you can use "return false;"
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    相关资源
    最近更新 更多