我是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的一部分
答案 0 :(得分:1)
从return false;
处理程序函数中删除第一个$('#signin a').click()
行。它导致执行在第二个单击处理程序(到#closebox a
)绑定之前返回。
答案 1 :(得分:1)
您需要将该函数委托给页面加载时存在的静态父元素。我们将此称为“冒泡”或“事件传播”。在jQuery的最新版本中,我们使用.on()
函数来执行这些操作。
$(document).on('click', '#closebox a', function(){
$('#loginpostion').removeClass()
return false;
});
答案 2 :(得分: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();
});
});
});
});
答案 3 :(得分: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
});
});
});
或者您可以使用委托/ live(如果您没有使用jquery 1.7+),如果您希望所有#closebox现在或将来都存在于页面上(使用jquery和ofcouse,那么你就不能拥有和#closebox的id然后你可以使用:
$(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;
});
});