Можно ли поддерживать цепочечность в плагине jQuery, а также возвращать истину или ложь - PullRequest
0 голосов
/ 03 марта 2012

Я написал плагин jQuery для начинающих, который проверяет форму.

этот плагин jQuery показывает ошибку под проверяющим элементом, если он оставлен пустым или не может пройти мой тест регулярного выражения.

Теперь я хочу вернуть истину или ложь из моего плагина, чтобы отключить кнопку отправки, если в форме есть Ошибка.

Вопрос: могу ли я сделать это, а также поддерживать Chainability моего плагина?

У меня есть что-то вроде этого:

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

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

Я вижу здесь много неправильно понятых.

Прежде всего, вы не пишете плагин jQuery.Плагин jQuery используется следующим образом:

jQuery( ".someSelector" ).myPluginName();

Вы используете метод mytextboxvalidator, переданный в функцию jQuery $.fn.change.

Во-вторых, как сказал Sparky672, вына самом деле стоит подумать об использовании уже существующего jQuery для проверки форм, есть масса, просто Google его.

В-третьих, поскольку я хороший парень, я постараюсь помочь вам с вашим плагином.

// 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. связать событие с submit событием формы
  2. в обработчике, проверить, что каждый элемент имеет допустимое значение
  3. если все элементы верны, выполняет отправку
  4. , если один или несколько недействительны, отключить событие, например, с помощью event.preventDefault call
2 голосов
/ 03 марта 2012
нет

Изменить:

Вы может сделать это, но это немного спорный:)

1008 * Нет, вы не можете. Что вам нужно сделать, это написать плагин так, чтобы он связывался с событием изменения селектора.

Внутри плагина вы делаете это для привязки к событию изменения:

...
$(this).bind('change', function () {
    //validation logic
});
...    
return this;

И вы используете плагин так:

$("input[text='text']").mytextvalidator({'regex':'something','message':'somethingelse'});
0 голосов
/ 03 марта 2012

Когда вы поддерживаете 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 
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...