4

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

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

我面临的问题:

  1. 当主页从内容页面生成内容时,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不存在。
但是当我在浏览器中单独打开它时,它可以工作。

4

4 回答 4

12

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

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

live()方法已弃用

于 2012-08-18T20:53:19.417 回答
2

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

如果是这样,你可能想看看.on()

于 2012-08-18T20:37:43.293 回答
1

您需要使用现场活动。

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

$(".something").live("click", function({ 
// do something
)};
于 2012-08-18T20:40:19.697 回答
1

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

$(document).on('click', '#MyID', function(e) {
    e.preventDefault(); // or you can use "return false;"
});
于 2013-06-06T08:33:00.527 回答