4

这是一个简单的例子:http ://codepen.io/spacejaguar/pen/KrvqNW

html:

<form data-parsley-validate>
  <label for="name">Name:</label>
  <input type="text" name="name" required>
  <br>
  <input type="submit" value="validate">

  <p><small>This is a simplistic example, good to start from when giving examples of use of Parsley</small></p>
</form>

和JS

$(function () {
    $('form').parsley()
    .on('form:init', function() {
        console.log('Form init', arguments);
    })
    .on('field:init', function() {
        console.log('Field init', arguments);
    })
    .on('form:validate', function() {
        console.log('Form validate', arguments);
    })
    .on('form:submit', function() {
        return false; // Don't submit form for this demo
    });
});

似乎 根本没有调用form:initfield:init回调函数,而其他任何一个都可以正常工作。我做错了什么?或者也许这是一个错误?

[编辑]
我查看了源代码并做了一些调试工作,似乎在附加任何侦听器之前触发了 init 事件。创建 parsley 实例如下所示:

  • $.fn.parsley 被调用
    -- 新 ParsleyFactory 被创建,调用 init fn
    --- ParsleyFactory.prototype.init 验证配置等并调用 bind fn
    ---- ParsleyFactory.prototype.bind 决定创建哪个构造函数(ParsleyForm, ParsleyField 或 ParsleyMultiple)
    ----- 调用新 ParsleyForm 并返回实例
    ---- ParsleyFactory.prototype.bind触发 init 事件并返回实例
    --- ParsleyFactory.prototype.init 返回实例
    -- ParsleyFactory 构造函数返回实例
  • $.fn.parsley 返回实例
  • .on('field:init', function() { ... }) 被绑定
4

1 回答 1

2

我遇到了同样的问题,感谢您对事件触发的研究,我找到了解决方案。只需将事件处理程序绑定到window.Parsley对象,它就可以正常工作。

例如:

window.Parsley.on('form:init', () => console.log('form:init'))
于 2016-08-22T10:56:47.920 回答