是否可以在jQuery插件中维护可链接性并返回true或false

是否可以在jQuery插件中维护可链接性并返回true或false,jquery,jquery-plugins,chainability,Jquery,Jquery Plugins,Chainability,我编写了一个用于验证表单的jQuery初学者插件 如果此jQuery插件留空或无法通过我的正则表达式测试,则它将在validating元素下显示一个错误 现在,如果表单有错误,我想从我的插件返回true或false来禁用submit按钮 问题是:我能做到这一点,并保持我的插件的链接能力吗 我有这样的想法: $("input[type='text']").change(this.mytextboxvalidator( {'regex':'something','message':'somethin

我编写了一个用于验证表单的jQuery初学者插件

如果此jQuery插件留空或无法通过我的正则表达式测试,则它将在validating元素下显示一个错误

现在,如果表单有错误,我想从我的插件返回true或false来禁用submit按钮

问题是:我能做到这一点,并保持我的插件的链接能力吗

我有这样的想法:

$("input[type='text']").change(this.mytextboxvalidator(
{'regex':'something','message':'somethingelse'}));
jQuery( ".someSelector" ).myPluginName();
编辑:

你可以这样做,但有点争议:

不,你不能。您应该做的是编写插件,使其绑定到选择器的更改事件

在插件中,执行以下操作以绑定到更改事件:

...
$(this).bind('change', function () {
    //validation logic
});
...    
return this;
您可以这样使用插件:

$("input[text='text']").mytextvalidator({'regex':'something','message':'somethingelse'});
编辑:

你可以这样做,但有点争议:

不,你不能。您应该做的是编写插件,使其绑定到选择器的更改事件

在插件中,执行以下操作以绑定到更改事件:

...
$(this).bind('change', function () {
    //validation logic
});
...    
return this;
您可以这样使用插件:

$("input[text='text']").mytextvalidator({'regex':'something','message':'somethingelse'});

维护链接能力时,将返回一个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 
 }

维护链接能力时,将返回一个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 
 }

我看到这里有很多误解

首先,您没有编写jQuery插件。jQuery插件的使用方式如下:

$("input[type='text']").change(this.mytextboxvalidator(
{'regex':'something','message':'somethingelse'}));
jQuery( ".someSelector" ).myPluginName();
您,您正在使用传递到jQuery函数$.fn.change中的方法mytextboxvalidator

第二,正如SARKY672所说的,你真的应该考虑使用已经存在的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/
});
我希望这会有所帮助。但是,此代码不会像您一样工作,除非。要使其发挥作用,您应该:

将事件绑定到表单的提交事件 在处理程序中,检查每个元素是否具有有效值 如果所有元素都有效,则执行提交 如果一个或多个无效,请禁用事件,例如使用event.preventDefault调用
我看到这里有很多误解

首先,您没有编写jQuery插件。jQuery插件的使用方式如下:

$("input[type='text']").change(this.mytextboxvalidator(
{'regex':'something','message':'somethingelse'}));
jQuery( ".someSelector" ).myPluginName();
您,您正在使用传递到jQuery函数$.fn.change中的方法mytextboxvalidator

第二,正如SARKY672所说的,你真的应该考虑使用已经存在的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/
});
我希望这会有所帮助。但是,此代码不会像您一样工作,除非。要使其发挥作用,您应该:

将事件绑定到表单的提交事件 在处理程序中,检查每个元素是否具有有效值 如果所有元素都有效,则执行提交 如果一个或多个无效,请禁用事件,例如使用event.preventDefault调用
你没有像现在这样链接你的插件方法,没有一个演示,任何答案都是完全的猜测写一个全新的jQuery验证插件就像在牛排馆旁边打开一个汉堡包摊。为什么?@Sparky672嗨,在我的情况下,我应该显示我在表格中的具体错误。是否有任何验证插件,提供正则表达式,并可以显示特定的消息在特定的格式?谢谢。jQuery验证插件提供了所有这些。它的errorPlacement选项有助于将错误放置在任何位置,包括div。你可以使用addMethod来使用任何你想要的正则表达式。你没有像现在这样链接你的插件方法,没有演示,任何答案都是完全的猜测编写一个全新的jQuery验证插件就像在牛排馆旁边打开一个汉堡包摊。为什么?@Sparky672嗨,在我的情况下,我应该显示我在表格中的具体错误。是否有任何验证插件,提供正则表达式,并可以显示特定的消息在特定的格式?谢谢。jQuery验证插件提供了所有这些。它的errorPlacement选项有助于将错误放置在任何位置,包括div。你可以使用addMethod来使用任何你想要的正则表达式。我认为这样做不是一个好主意。jQuery方法应该始终返回jQuery Javascript对象,除非在某些罕见的情况下。像这样返回一个mixin对象是令人困惑的,并且是jQuery的错误用法。默认情况下,jQuery对象是一个非常混合的对象。@Dr.Molle,很好的提示,谢谢,alotI不认为这样做是一个好主意。jQuery方法应该始终返回jQuery Javascript对象,除非在某些罕见的情况下。像这样返回一个mixin对象是令人困惑的,这是对jQuery的错误使用。默认情况下,jQuery对象是一个非常混合的对象。@Dr.Molle,很好的提示,非常感谢