我正在设置分面搜索,其中表单数据被序列化并用于确定要使用load()
引入的内容。我有两个主要部分,侧边栏(.sidebar
)和结果区域(.results
),全部包装在包装器(.wrap
)div中。
var mainContent = .results
$('#facets').change(function(e){
mainContent.load('?' + formData + ' .results');
e.preventDefault();
});
当我以这种方式执行时,表单继续按预期运行(在change()上异步加载结果。)
...但表单也可以加载,这很重要,因为搜索结果会动态填充构面。
当我将mainContent
变量更改为整个包装器div ...
var mainContent = .wrap
$('#facets').change(function(e){
mainContent.load('?' + formData + ' .wrap');
e.preventDefault();
});
..表单第一次提交更改,但在通过ajax
将其拉入DOM后停止反应。
我错过了什么?
答案 0 :(得分:3)
使用delegated event,因为在DOM加载后通过ajax加载元素:
$(document).on('change','#facets',function(e){
mainContent.load('?' + formData + ' .wrap');
e.preventDefault();
});
答案 1 :(得分:0)
您可以尝试使用Mutation-Observers来处理此类情况
var target = $( "#facets" )[0];
// Create an observer instance
var observer = new MutationObserver(function( mutations ) {
mutations.forEach(function( mutation ) {
var newNodes = mutation.addedNodes; // DOM NodeList
if( newNodes !== null ) {
mainContent.load('?' + formData + ' .wrap');
e.preventDefault();
}
});
});
var config = {
attributes: true,
childList: true,
characterData: true
};
observer.observe(target, config);
您可以在此处详细了解Mutation Observers。