我写了一个初学jQuery插件来验证表单。
这个jQuery插件在验证元素下显示错误,如果它留空或者它无法通过我的正则表达式测试。
现在我想从我的插件返回true或false,如果表单有错误,则禁用提交按钮。
问题是:我可以这样做并保持插件的可链接性吗?
我有这样的事情:
$("input[type='text']").change(this.mytextboxvalidator(
{'regex':'something','message':'somethingelse'}));
答案 0 :(得分:2)
修改:
你可以这样做,但这有点争议:)
不,你不能。 你应该做的是编写插件,使其绑定到选择器的change事件。
在插件中,您可以将其绑定到更改事件:
...
$(this).bind('change', function () {
//validation logic
});
...
return this;
你使用这样的插件:
$("input[text='text']").mytextvalidator({'regex':'something','message':'somethingelse'});
答案 1 :(得分:2)
我在这里看到了很多误解。
首先,你不是在编写一个jQuery插件。一个jQuery插件使用如下:
jQuery( ".someSelector" ).myPluginName();
您,您正在使用传递给jQuery函数mytextboxvalidator
的方法$.fn.change
。
其次,正如Sparky672所说,你真的应该考虑使用已经存在的jQuery进行表单验证,那里有很多,只有谷歌。
第三,由于我是一个好人,我会尽力帮助你使用你的插件。
// myFormValidationPlugin is the name of your plugin, change it as you want
$.fn.myFormValidationPlugin = function( options ) {
// bind the event inside the plugin
this.change(function( ev ) {
// doing some BASIC verification
if( options.pattern.test( $(this).val() ) {
// input is valid
// in your example, I guess it's here you want to return TRUE
}
else {
// input is invalid
// in your example, I guess it's here you want to return FALSE
}
});
// NEVER break the chain
// so yes, you can maintain chainability
return this;
};
// usage
$( ".someSelector" ).myFormValidationPlugin({
pattern: /foo/
});
我希望这会有所帮助。但是,此代码不会像您一样工作。为了使其有效,你应该:
submit
事件
处理程序中的event.preventDefault
调用答案 2 :(得分:0)
当你维护chainabilty时,你返回一个jQuery对象。它是一个对象,所以只需在存储布尔值的对象中添加一个属性:
(function( $ ){
$.fn.someMethod = function( ) {
var bln=true;
return (this.each(function() {
//modify boolean when needed
bln=false;
}).extend({myBoolean:bln}));
};
})( jQuery );
用法:
if(!$('someselector').someMethod().myBoolean)
{
//disable the button
}