JSFiddle - React, Tailwind, and code Playground
by springuper
HTML
<form action="/" method="post">
<div>
<label for="email">Email:</label>
<input type="email" name="email" id="email" />
<span class="tip"></span>
</div>
<div>
<input type="submit" />
</div>
</form>
JavaScript
YUI.add('field-validator', function (Y) {
// 表单项验证组件
Y.FieldValidator = function (ndField, validateFn) {
var instance = this;
// 声明事件,设置默认行为
instance.publish('success', {
emitFacade: true,
defaultFn: function (e) {
e.field.next('.tip').setHTML('ok');
}
});
instance.publish('failure', {
emitFacade: true,
defaultFn: function (e) {
e.field.next('.tip').setHTML('error');
}
});
ndField.on({
focus: function (e) {
ndField.next('.tip').setHTML('');
},
blur: function (e) {
if (validateFn(this.get('value'))) {
// 检查通过,触发成功事件
instance.fire('success', { field: ndField });
} else {
// 检查未通过,触发失败事件
instance.fire('failure', { field: ndField });
}
}
});
};
Y.augment(Y.FieldValidator, Y.EventTarget);
}, '1.0', {
requires: ['event-custom']
});
YUI().use('node', 'field-validator', function (Y) {
var validator = new Y.FieldValidator(Y.one('[name="email"]'), function (value) {
return /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/.test(value);
});
validator.on('success', function (e) {
// 阻止默认行为
e.preventDefault();
// 定制化代码
if (e.field.get('value').indexOf('@yahoo.com') !== -1) {
e.field.next('.tip').setHTML('换个邮箱吧,yahoo.com邮箱收不到优惠通知哦');
}
});
});