2016-07-07 77 views
4

在这里工作是一个简单的例子:http://codepen.io/spacejaguar/pen/KrvqNW形式init和领域的init事件不会在parsley.js

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 
    }); 
}); 

似乎形式: init字段:init回调函数完全不会被调用,而其他任何函数都可以正常工作。我做错了什么?或者,也许这是一个错误?我编译了源代码并做了一些调试工作,似乎init事件在任何监听器被连接之前触发。创建香菜实例看起来相似:

  • $ .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返回实例
  • 。对( '字段:初始化',函数(){... })正在绑定
+0

有趣。所以'$ .Parsley.on('form:init')'会起作用,但这是捕捉事件的唯一方法。在初始化之后触发事件(比如使用'setTimeout')确实可能是最好的。感觉像写一个公关? –

+0

恐怕我不能在不久的将来这样做,但我会稍后再试一试。 – RamboBambo

回答

1

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

例如:

window.Parsley.on('form:init',() => console.log('form:init')) 
+0

是的,它以某种方式解决了这个问题,但请记住,通过这种方式,您可以在全局绑定'form:init',并且将为每个欧芹实例调用它。 – RamboBambo

+0

这是真的。在这种情况下,我只有一种形式。说实话,在欧芹中发射的事件绑定/事件对我来说并不是很清楚。 – Jonathan