我在使用 Ninja Forms + Multi Step 表单插件实现 jQuery 单击事件时遇到了麻烦。目标是消除用户单击“下一步”按钮的需要。
使用以下函数,我可以成功触发单击下一步按钮,但仅限于第一步。一旦第二步加载,整个函数似乎就解除了绑定(由于 DOM 的变化?)。
jQuery(document).on( 'nfFormReady', function( e, layoutView ) {
jQuery( ".nf-field-element ul li label" ).click(function() {
var nextButton = jQuery(this).closest('.nf-form-content').find('.nf-next');
jQuery(nextButton).click();
});
});
是否有更好的解决方案来实现这一目标?我似乎在多部分表单插件上找不到任何具体的开发人员资源。
我在 Ninja Forms Developer Slack 频道中找到了有关如何将函数绑定到页面更改的信息。也许这可能是您的解决方案。
您需要挂钩页面更改:
nfRadio.channel( 'nfMP' ).trigger( 'change:part', this );
参见:
/assets/js/front-end/models/partCollection.js#33
看起来,如果你将操作挂钩到页面更改,它将重新绑定到下一页上的新 DOM。
对我有用的另一种解决方案是将 jQuery 绑定到表单的父元素,该元素不会使用以下方法从 DOM 中删除:
jQuery(document).on('click', '#parentid'`, function( e layoutView ) {
jQuery( ".nf-field-element ul li label" ).click(function() {
var nextButton = jQuery(this).closest('.nf-form-content').find('.nf-next');
jQuery(nextButton).click();
});
});
我还没有对此进行测试,但希望它能为您指明正确的方向。
此外,我听说,使用
on('click')
可能会出现性能问题,但它似乎根本不会影响我的形式。
第一个答案是一个好的开始,但是使用的 jQuery 需要双击才能注册。加载到页脚中的以下脚本就像一个魅力:
(function($) {
$(document).ready(function () {
// on ID (#) click, do the following:
$(document).on('click', '#clickedID', function(event) {
event.preventDefault;
// click the input button associated with .nf-next class
$(".nf-next").click();
});
});
})( jQuery );
为了在 WordPress 中编写标准 jQuery,如上所示,请将标准 jQuery 包装在以下内容中:
(function($) {
<Standard jQuery>
})( jQuery );
我知道这个问题很老了,但他们的(Ninja Forms)文档以前从未对我有用过。在此发布此内容,以防有人在尝试跟踪多部分表单中的部分更改点击时仍然遇到问题。
if(typeof Marionette !== 'undefined') {
nfRadio.channel( 'nfMP' ).on('change:part', function() {
console.log('step: found');
});
}
除了使用 Interval 函数来检测 DOM 是否具有特定元素之外,似乎没有其他方法可以工作。新泽西州表格的其他“onClicks”的肮脏解决方法。