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

时间:2012-03-03 19:24:15

标签: jquery jquery-plugins chainability

我写了一个初学jQuery插件来验证表单。

这个jQuery插件在验证元素下显示错误,如果它留空或者它无法通过我的正则表达式测试。

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

问题是:我可以这样做并保持插件的可链接性吗?

我有这样的事情:

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

3 个答案:

答案 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/
});

我希望这会有所帮助。但是,此代码不会像您一样工作。为了使其有效,你应该:

  1. 将事件绑定到表单
  2. submit事件 处理程序中的
  3. ,检查每个元素是否具有有效值
  4. 如果所有元素都有效,请执行提交
  5. 如果一个或多个无效,则禁用该事件,例如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 
 }