当ajaxed内容的一部分时,jQuery表单无法正常工作
我正在设置一个分面搜索,其中表单数据被序列化并用于确定要使用load()
引入的内容。 我有两个主要部分,侧边栏( .sidebar
)和结果区域( .results
),都包装在一个包装器( .wrap
)div中。
var mainContent = .results $('#facets').change(function(e){ mainContent.load('?' + formData + ' .results'); e.preventDefault(); });
当我以这种方式执行时,表单继续按预期运行(在change()上异步加载结果。)
…但重要的是表单也会被加载 ,因为facet是由搜索结果动态填充的。
当我将mainContent
变量更改为整个包装器div时…
var mainContent = .wrap $('#facets').change(function(e){ mainContent.load('?' + formData + ' .wrap'); e.preventDefault(); });
..表格第一次提交更改,但在通过ajax
拉入DOM后停止反应。
我错过了什么?
使用委托事件 ,因为在DOM加载后通过ajax加载元素:
$(document).on('change','#facets',function(e){ mainContent.load('?' + formData + ' .wrap'); e.preventDefault(); });
您可以尝试使用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的更多信息。