0

我是 jquery 的新手,但已经喜欢它了(我是一名 php 程序员)。

我刚刚使用 .load() 函数将内容从另一个页面加载到新页面。我能够加载内容。

但是,我现在希望访问新加载内容的某些元素,但我无法做到这一点。

  $(document).ready(function() {

      $('#signin a').click(function() {
     var url=$(this).attr('href');
      $('#loginpostion').load(url + ' #loginform');
      return false;


       $('#closebox a').click(function() {


        $('#loginpostion').removeClass()

      return false;


      }); //end click  

我现在希望从新加载的页面访问以下 A 标记:#closebox a

我需要做些什么来让 Jquery 知道“新加载的内容”现在将成为当前页面 DOM 的一部分

4

4 回答 4

1

您可以在load方法上使用完整的回调方法,例如:

$(document).ready(function() {
    $('#signin a').click(function() {
        var url=$(this).attr('href');
        $('#loginpostion').load(url + ' #loginform', function() {
            $('#closebox a').click(function() {
                $('#loginpostion').removeClass()
                return false;
            }); //end click  
        });
    });
});

或者您可以使用委托/实时(如果您不使用 jquery 1.7+),如果您希望所有 #closebox 元素现在或将来存在于页面上(使用 jquery 和 ofcouse 那么您不能拥有和 id #closebox) 然后你可以使用:

$(document).ready(function() {
    $(document).on('click', '#closebox a', click() {
        $('#loginpostion').removeClass();
        return false;
    });

    $('#signin a').click(function() {
        var url=$(this).attr('href');
        $('#loginpostion').load(url + ' #loginform');
        return false;
    });
});
于 2012-08-23T05:40:48.530 回答
1

您需要将该函数委托给页面加载时存在的静态父元素。我们将此称为“冒泡”或“事件传播”。在 jQuery 的最新版本中,我们使用该.on()函数来执行这些操作。

$(document).on('click', '#closebox a', function(){

    $('#loginpostion').removeClass()

     return false;
});
于 2012-08-23T05:34:47.703 回答
1

load()使用 ajax,它是异步的,因此它会在您的脚本继续运行时在后台加载。这意味着当您尝试访问#closebox脚本的下一行时,它还不存在,因为它还没有被插入到 DOM 中。你必须等到load()函数完成,幸运的是load()有一个回调函数。此外,每当您使用 return 时,脚本都会结束并返回,因此您必须这样做:

$(document).ready(function() {
    $('#signin a').click(function(e) {
        e.preventDefault();
        var url=$(this).attr('href');
        $('#loginpostion').load(url + ' #loginform', function() {
             $('#closebox a').click(function(e) {
                 e.preventDefault();
                 $('#loginpostion').removeClass();
             });
        });
    });
});
于 2012-08-23T05:34:55.383 回答
1

从处理程序函数中删除第一return false;行。$('#signin a').click()它导致执行在第二个点击处理程序 (to #closebox a) 被绑定之前返回。

于 2012-08-23T05:32:51.047 回答