使用它的另一个页面中的javascript代码加载页面的一部分

时间:2011-10-19 17:01:30

标签: javascript jquery ajax

我有一个带有按钮的表,它向表中添加了一些行并且它工作正常,我想通过jquery加载函数在另一个页面加载它们的父div但是当我加载它们时按钮不再工作

这是我的html代码,实际上我只是写了这个,但你明白了,也忽略了语法问题

<head>

<script>
$(function(){
$('#adder').click(function(){
$(this).siblings('table').append('<tr><td></td></tr>');
}
}
</script>

<head>
<body>
<div id="main">
<table> </table>
<a href="" id="adder"> </a>
</div>

</body>

在另一个页面中,虽然我在标题中有相同​​的jquery代码,但按钮不再起作用 这是我的另一页

   <head>
    <script>
    function loader(){
    $('#loader').load('a.php #main');
    }
    </script>
    </head>
<body>
<div id="loader"></div>
</body>

我在div的末尾处理了广告jq代码,所以当它加载到另一个页面时,jq也会被加载

    <div id="main">
    <table> </table>
    <a href="" id="adder"> </a>
<script>
$('#adder').click(function(){
$(this).siblings('table').append('<tr><td></td></tr>');
}
</script>
    </div>

但仍无效

///////////////////////

另一个问题:

如果没有活动,我该如何使用直播? 例如,我有一个插件,它对页面div有一些影响,并在页面加载时调用

<head> 
<script>
$(function(){
$('div').plugin(plugin settings);
})
</script>
</head>

现在,如果我在页面中添加一个div,我应该如何使用直播,以便我的新div获得该效果?

3 个答案:

答案 0 :(得分:1)

对于动态创建的元素,您需要使用livedelegate,例如:

$('selector').live('click', function(){
  // your code here...
}

更多信息:http://api.jquery.com/live/

答案 1 :(得分:0)

正如@matino指出的那样,您应该使用.live("click", function...)代替.click(function...)

但是,你不应该期望将a.php中的脚本加载到你正在调用.load的页面中,因为当你加载页面片段时该函数不会执行任何javascript。

来自jQuery docs

  

注意:使用不带后缀选择器表达式的URL调用.load()时,会在删除脚本之前将内容传递给.html()。这将在丢弃之前执行脚本块。但是,如果使用附加到URL的选择器表达式调用.load(),则在更新DOM之前会删除脚本,这就是它们永远不会被执行的原因。

答案 2 :(得分:0)

$("body").delegate("#adder", "click", function(){
    $(this).siblings('table').append('<tr><td></td></tr>');
});

http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/

大“啊哈!”对我来说,学习代表的时刻只是谷歌的代表定义。

  

del·e·gate [n。 del-i-git,-geyt; v.del-i-geyt]显示IPA名词,   动词,-gat·ed,-gat·ing。名词   的 1。指定代表他人或代表他人的人;副;代表,如政治公约。

这是“计算机科学”之一,在你掌握了这个概念或用谷歌搜索定义之前没有多大意义。在掌握术语之前,有助于了解定义。它被命名为“代表”有一个原因:p

在你的例子中,.load()添加的新创建的元素是那些太年轻而无法处理事件责任的“青少年”或“青少年”。因此,当您向他们请求事件时,浏览器会查看代理人以了解应该发生的事情。

要向新DOM元素添加插件(第二个问题),您必须在加载事件期间启用插件。

$("body").delegate("div", "load", function(this){ 
    $(this).plugin( settings ); 
});