jQuery:动态加载元素的大小/长度
我有一个表单,并通过jQuery的load函数动态地向其中添加新的输入和选择元素。有时加载的元素是空的,在这种情况下,我想隐藏container div,这样它就不会破坏样式 问题是,我似乎无法计算加载的元素,因此不知道它是否应该隐藏 例如,我有:jQuery:动态加载元素的大小/长度,jquery,dynamic,Jquery,Dynamic,我有一个表单,并通过jQuery的load函数动态地向其中添加新的输入和选择元素。有时加载的元素是空的,在这种情况下,我想隐藏container div,这样它就不会破坏样式 问题是,我似乎无法计算加载的元素,因此不知道它是否应该隐藏 例如,我有: <div id="param_container"></div> 即使添加了新的children元素,子元素的长度始终为0 有什么想法吗 编辑: 我的解决方案 $('#param_container').load('/get
<div id="param_container"></div>
即使添加了新的children元素,子元素的长度始终为0
有什么想法吗
编辑:
我的解决方案
$('#param_container').load('/get_params', {cat:category}, function(response) {
if (response) {
$('#param_container').css('display', 'block');
} else {
$('#param_container').css('display', 'none');
}
});
您需要从div的id中删除,即 你写道:
<div id="#param_container"></div>
你需要:
<div id="param_container"></div>
当您在jQuery中编写$'param_container'时,它意味着您需要一个元素,其中id等于不带符号的字符串。因此,不需要将其包含在html代码中。原因是调用是异步的,它在函数返回后完成
您可以使用成功回调,如下所示:
alert($('#param_container').children().length);
// Returns and loads new element correctly. Can be empty.
$('#param_container').load('/get_params', {cat:category}, function() {
if ($('#param_container').children().length ) {
$('#param_container').css('display', 'block');
} else {
$('#param_container').css('display', 'none');
}
alert($('#param_container').children().length);
});
您可以尝试使用LoadAPI完成回调 如果提供了完整的回调,则在执行后处理和HTML插入之后执行回调
$('#param_container').load('/get_params', {cat:category},
function() {
if ($('#param_container').children().length ) {
$('#param_container').css('display', 'block');
} else {
$('#param_container').css('display', 'none');
}
}
);
这是问题的一半,我不认为人们有任何必要否决它。不过,很明显,这只是OP修复的问题中的一个拼写错误,所以现在可能应该删除它。你+1000个互联网,其他人+500个互联网。我犯了同样的错误。我自己解决了这个问题:使用了.load的回调函数来检查响应。我最终得到了几乎相同的解决方案,尽管这样更好。谢谢@希鲁米:很高兴这有帮助@Seerumi:我应该在上面说过,可能值得查找元素一次并在变量中记住它,而不是每次都重新运行$param_容器。每次调用$,都会导致几个函数调用和内存分配。当然,浏览器最终会清理它们,但是。。。
$('#param_container').load('/get_params', {cat:category},
function() {
if ($('#param_container').children().length ) {
$('#param_container').css('display', 'block');
} else {
$('#param_container').css('display', 'none');
}
}
);